2016-10-25 5 views
0

Ich entwickle eine Webanwendung auf Basis des Silex-Frameworks mit anständiger Mail-Funktionalität. Das Versenden von Mails funktioniert gut mit der Grundkonfiguration und der Verbindung zum Mailserver. Im Falle von Fehlern z.B. Aufgrund von Verbindungsverlust möchte ich die Ursachen protokollieren und verhindern, dass sie an den Client gesendet werden. Aber ich bin nicht in der Lage, die Mailer Fehler zu fangen, vor allem die Swift_TransportException. Ich habe den Aufruf der Funktion 'send' gekapselt und einen Fehler-Handler hinzugefügt, beides ohne Erfolg. Ist das ein Fehler, oder fehlt mir etwas?Silex Swiftmailer Swift_TransportException unzugänglich

Die Fehlerbehandlung:

$app->error(function (\Swift_TransportException $e, Request $request, $code) { 
     //TODO log 
    }); 

Die Nutzung der Sendefunktion:

 try{ 
      $message = \Swift_Message::newInstance() 
       ->setSubject($mail->getSubject()) 
       ->setFrom($mail->getFrom()) 
       ->setTo($mail->getTo()) 
       ->setBody($mail->getBody()); 

      $app['mailer']->send($message); 
     } 
     catch(\Swift_TransportException $exception) 
     { 
      //TODO log 
     } 

Antwort

1

ich eine Lösung für mein Problem in diesem Beitrag nicht gefunden:

silex-swiftmailer-not-making-smtp-connection-upon-execution

zu Zusammengefasst wurde das Problem durch das Standardverhalten der swiftmaile verursacht r in Silex. Standardmäßig werden die E-Mails nicht direkt zur Ausführungszeit des Codes gesendet, sondern gepuffert und gesendet, nachdem das Anfrageergebnis an den Client zurückgegeben wurde. Daher werden Fehler im try-Block nicht abgefangen. Um dieses Verhalten zu ändern, habe ich leicht modifizierten Code aus dem referenzierten Post zu meiner Mailer-Registrierung hinzugefügt.

$app->register(new Silex\Provider\SwiftmailerServiceProvider()); 
$app['mailer'] = new \Swift_Mailer($app['swiftmailer.transport']); 

dank igor für die gute Erklärung.