2017-03-14 8 views
1

habe ich die nächste Klasse:Symfony2 senden E-Mail aus dem Dienst

 
//src/AppBundle/Services/RegisterMail.php 

namespace AppBundle\Services; 

class RegisterMail{ 
    protected $mailer; 

    public function __construct($mailer) 
    { 
     $this->mailer = $mailer; 
    } 

    public function sendPassword(){ 
     $message = \Swift_Message::newInstance() 
      ->setSubject('Otro correo') 
      ->setFrom('[email protected]') 
      ->setTo('[email protected]') 
      ->setBody('hola desde el servicio') 
     ; 
     $envia = $this->mailer->send($message); 
    } 
} 

Und ich erkläre es als Dienst in meinem services.yml

 
services: 
    registermail: 
     class: AppBundle\Services\RegisterMail 
     arguments: [@mailer] 

In meinem Controller Aufruf des Dienstes:

//src/AppBundle/Controller/DefaultController 

namespace AppBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 

class DefaultController extends Controller 
{ 
    /** 
    * @Route("/") 
    */ 
    public function indexAction() 
    { 
     //Envío el email con el password 
     $mailer = $this->get('registermail'); 
     $mailer->sendPassword(); 
     return $this->render(':Default:index.html.twig'); 
    } 

} 

Die E-Mail wird gesendet, aber die Seite wird immer noch 30 Sekunden geladen, und ich habe eine Warnung von der Entwicklersymbolleiste: "Beim Laden ist ein Fehler aufgetreten die Web-Debug-Symbolleiste (404: nicht gefunden). Möchten Sie den Profiler öffnen? Wenn Accept die Nachricht Symfony Profiler zeigt keinen Fehler. Wenn die Nachrichtenentwickler-Symbolleiste abbrechen wird nicht angezeigt.

Was mache ich falsch?

Vielen Dank!

Antwort

0

@ RL83 Sie senden wahrscheinlich die Nachricht synchron, indem Sie keine Art von Spool in swiftmailer verwenden und Ihr SMTP-Provider arbeitet langsam.

Sie sollten versuchen, eine async Spool-Warteschlange verwenden, würde ich empfehlen, https://github.com/radutopala/TSSAutomailerBundle, die Sie mit einer Datenbankwarteschlange bietet. Im Grunde haben Sie nicht nur eine Spool-Warteschlange, sondern auch einen Verlauf der gesendeten E-Mails, die in der Datenbank-Ebene gespeichert sind. - den Transport Service "@swiftmailer.transport.real"

services: 
registermail: 
    class: AppBundle\Services\RegisterMail 
    arguments: ["@mailer", "@swiftmailer.transport.real" ] 

Und Ihre Mühe

0

Versuchen Sie den Code mit diesem ersetzen für Ihre Antworten und Entschuldigung für die Verzögerung.

@lyberteam, als ich Ihren Code zu setzen, bekomme ich diese Fehlermeldung: Notice: Undefined variable: Mailer 500 Internal Server Error - ContextErrorException

hier: $ email = $ mailer-> Create()

Irgendwelche Vorschläge?

Vielen Dank

+0

Vielen Dank für Ihre Antworten und Entschuldigung für die Verzögerung. @lyberteam, als ich Ihren Code zu setzen, erhalte ich diese Fehlermeldung: Notice: Undefined variable: Mailer 500 Fehler Internal Server - ContextErrorException hier: $ email = $ mailer-> Create() Jeden Vorschlag? Vielen Dank – RL83

0

Dank gelöst werden

//src/AppBundle/Services/RegisterMail.php 

namespace AppBundle\Services; 

class RegisterMail{ 
    protected $mailer; 

    protected $transport; // <- Add transport to your service 

    public function __construct($mailer, $transport) 
    { 
     $this->mailer = $mailer; 
     $this->transport = $transport; 
    } 

    public function sendPassword() // <- change the method like this 
    { 
     $email = $mailer->createMessage() 
     ->setSubject('Otro correo') 
     ->setFrom('[email protected].com') 
     ->setTo('[email protected]') 
     ->setCharset("UTF-8") 
     ->setContentType('text/html') 
     ->setBody('hola desde el servicio') 
    ; 

    $send = $mailer->send($email); 
    $spool->flushQueue($transport); 
    } 
} 

Registrieren Service und fügen Sie die neue Abhängigkeit:

Verwandte Themen