swift_message mail example php symfony1 symfony-1.4 swiftmailer

php - example - Estado de entrega de Swift Mailer



swift_message (3)

Más bien una publicación antigua, pero a partir de Swiftmailer 4+ y aparte de obtener el estado del result de la llamada del método de send . Si desea depurar su correo y ver qué sucede durante el transporte, puede usar los complementos de Logger, o incluso crear su propio complemento. https://swiftmailer.symfony.com/docs/plugins.html

$mailer = /Swift_Mailer::newInstance( /Swift_SmtpTransport::newInstance(''tls://smtp.gmail.com'', 465) ); $logger = new /Swift_Plugins_Loggers_ArrayLogger; //$logger = new /Swift_Plugins_Loggers_EchoLogger; //echo messages in real-time $mailer->registerPlugin(new /Swift_Plugins_LoggerPlugin($logger)); for ($lotsOfRecipients as $recipient) { //... $mailer->send(/*...*/); } echo $logger->dump(); //not needed if using EchoLogger plugin

El cual emitirá el mensaje de transporte para cada llamada de send , que parece

++ Starting Swift_SmtpTransport << 220 smtp.gmail.com ESMTP x12sm4143221vkc.19 - gsmtp >> EHLO server.example.com << 250-smtp.gmail.com at your service, [192.168.1.1] 250-SIZE 35882577 250-8BITMIME 250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-CHUNKING 250 SMTPUTF8 >> AUTH LOGIN << 334 AbcDefGhIjKlMnop >> AbcDefGhIjKlMnop== << 334 AbcDefGhIjKlMnop >> AbcDefGhIjKlMnop== << 235 2.7.0 Accepted ++ Swift_SmtpTransport started >> MAIL FROM: << 250 2.1.0 OK x12sm4143221vkc.19 - gsmtp >> RCPT TO:<[email protected]> << 250 2.1.5 OK x12sm4143221vkc.19 - gsmtp >> DATA << 354 Go ahead x12sm4143221vkc.19 - gsmtp >> . << 250 2.0.0 OK 1468948643 x12sm4143221vkc.19 - gsmtp

¿Alguien sabe si la función de envío de SwiftMailer devuelve el estado de entrega? Me gustaría poder saber que el correo electrónico se entregó o no se entregó. ¿Es esto posible?

Gracias


SwiftMailer admite al menos tres capas de controles que informarán sobre varios tipos de fallas en la entrega.

1) Siempre verifique el código de retorno de los comandos send () o batchSend () de SwiftMailer para obtener un resultado distinto de cero. De la documentación :

//Send the message $numSent = $mailer->send($message); printf("Sent %d messages/n", $numSent); /* Note that often that only the boolean equivalent of the return value is of concern (zero indicates FALSE) if ($mailer->send($message)) { echo "Sent/n"; } else { echo "Failed/n"; }

2) Utilice la función de swiftmailer.org/docs/sending.html#getting-failures-by-reference para saber si las direcciones específicas fueron rechazadas o no pudieron completarse:

//Pass a variable name to the send() method if (!$mailer->send($message, $failures)) { echo "Failures:"; print_r($failures); } /* Failures: Array ( 0 => [email protected], 1 => [email protected] ) */

3) En algunas situaciones es posible que también desee habilitar los recibos de devolución , lo que confirma que un lector de correo electrónico mostró el mensaje. A menudo son deshabilitados o ignorados por los usuarios o sus aplicaciones de correo electrónico, pero si obtiene un recibo, es altamente confirmatorio. Tenga en cuenta también que esto puede ocurrir muchos días después del envío, por lo que no es una prueba síncrona en tiempo real como las dos anteriores.

$message->setReadReceiptTo(''[email protected]'');

Sin embargo, dado que hay tantas variables y capas de sistemas involucrados en la entrega de SMTP, generalmente no es posible estar absolutamente seguros de que se entregaron los mensajes. Lo mejor que puede hacer es asegurarse de estar usando las dos primeras comprobaciones anteriores. Si está utilizando SU propio servidor para el servicio SMTP, TAMBIÉN debe estar viendo sus registros y colas como lo mencionó Marc B.

Otro ejemplo que enfatiza la necesidad de familiarizarse con cualquier sistema de correo electrónico subyacente que esté utilizando. Acabo de comenzar a usar Swift_AWSTransport de John Hobbs para Amazon Web Services SES. SES tiene la capacidad de devolver una respuesta XML con información de diagnóstico para cada mensaje enviado a través de él. Aunque SwiftMailer no entiende de manera inherente cómo usar esa respuesta XML, he encontrado que es invaluable para la solución de problemas de entrega. Lo menciono porque descubrí que, en algunos casos, los chequeos # 1 y # 2 de arriba parecen ser exitosos para SwiftMailer, pero a SES no le gustó nada sobre el formato de mi mensaje. Por lo tanto, estoy buscando analizar ese XML como una verificación adicional.


Swiftmailer no tiene nada que ver con la entrega real del correo. Simplemente transfiere las cosas al servidor SMTP que hayas especificado, y es ese servidor el que se encarga de la entrega. Debe revisar los registros del servidor SMTP para ver qué sucedió con el correo. Puede atascarse en la cola de salida porque el servidor está saturado. Puede quedarse atascado en una cola porque el extremo receptor no está disponible o está usando una lista gris, etc. El trabajo de Swiftmailer finaliza una vez que recibe el acuse de recibo del servidor SMTP de que el correo se ha puesto en cola.