Cómo comprobar un mensaje ha sido enviado al utilizar Zend_Mail?
-
21-09-2019 - |
Pregunta
Estoy utilizando el Zend Framework para enviar correo. Una vez que la configuración se realiza y el código escrito que todo se reduce a una sola llamada:
$Mail->send($Transport)
¿Cómo puedo comprobar que este mensaje ha sido enviado correctamente? He leído en alguna parte que Zend correo lanza una excepción, pero otras personas han dicho esto a veces no es el caso.
¿Cuál es la forma programática a prueba de balas para garantizar mensaje ha sido enviado correctamente cuando se utiliza Zend_Mail?
EDIT:. Cuando me refiero envié, me refiero envía al servidor SMTP
Solución
En general Zend_Mail
será una excepción si hay algo malo sucede en el proceso de envío-- pero esto depende en gran medida del Zend_Mail_Transport_*
está utilizando
Existen dos opciones aquí:
-
Zend_Mail_Transport_Sendmail
(el transporte por defecto) se basa enmail()
. Simail()
vuelvefalse
,Zend_Mail_Transport_Sendmail
lanza unaZend_Mail_Transport_Exception
( No se puede enviar correo ). El valor de retorno en sí no es muy fiable. Esto es lo que dice el manual sobre el valor de retorno:Devuelve VERDADERO si el correo fue aceptado satisfactoriamente para su envío, de lo contrario.
Es importante tener en cuenta que sólo porque el correo fue aceptado para la entrega, esto no significa que el correo realmente vaya a llegar al destino previsto.
-
Zend_Mail_Transport_Smtp
envía el correo electrónico utilizando el protocolo SMTP que se encapsula enZend_Mail_Protocol_Smtp
. En este caso obtendrá unZend_Mail_Protocol_Exception
cada vez que algo viola ya la (envío de correo sin dar la dirección del remitente, por ejemplo) o protocolo SMTP informa al servidor SMTP un error o los tiempos de espera de la conexión.Así que si no es una excepción es lanzada al hablar con el servidor SMTP, puede estar seguro de que el servidor remoto al menos aceptó su correo electrónico.
Otros consejos
Creo que no lo es. Si "enviar" No se pudo obtener una excepción. Pero eso es sólo un cheque, que la función send () funcionaba correctamente. Esto no significa que el correo consiguió enviar.
Creo que la única manera de ensude el correo fue entregado es insertar un enlace código de confirmación inte el correo y hacer que el usuario haga clic en él.