2010-07-31 15 views
6

¿hay alguna manera de probar con PHPUnit (o tal vez con otro marco de prueba para PHP) si el correo se envía correctamente? Tengo que probar un código que usa PHP función de correo(). Con clase de correo personalizado, siempre podría hacer un simulacro, pero para el correo() ...? ¿Tal vez hay algún complemento que sea capaz de usar IMAP y verificar si se recibe el correo? (Y debe ser independiente del sistema operativo si es posible ...)cómo probar mail() usando PHPUnit

Respuesta

-4

hay una manera de probar con PHPUnit (u otro marco de pruebas tal vez por PHP) si el correo se envía correctamente?

Si desea comprobar si es o no email se mandó correctamente, no es necesario PHPUnit, sólo tiene que hacer:

mail(.....) or die('Could not send the email !!'); 

O

if (!mail(......)){ 
    echo 'Could not send the email !!'; 
} 

Nota que esto le dice si se envió o no el correo NO si se recibió o no para quién t El correo electrónico fue enviado. Entonces, el mejor término aquí debería ser entregado.

+0

Muy bien, ya que el único fracaso se puede detectar de forma fiable es la falta de entrega local. Comprobar si se ha recibido en una bandeja de entrada puede fallar por una miríada de razones. –

+0

no es para verificar si se envió el correo o no. es para pruebas unitarias. Necesito saber no solo si se envió el correo (no hay problema porque paso la devolución del correo()), sino también si está bien formado (encabezados, contenido, archivos adjuntos, etc.) y entregado en la cuenta correcta) –

+0

@ts No estoy muy seguro de si esto es adecuado para las pruebas unitarias: son tantas cosas que podrían salir mal según la configuración del servidor. Yo diría que esto requiere un simulacro. –

6

La solución aquí sería envolver el correo en una clase que podría ser burlada y usarla en su lugar.

No veo el punto en la prueba de mail() en sí, estoy seguro de que ya ha sido probado a fondo.

+0

mi problema es que el correo() es solo parte del método más grande –

+1

@ts El punto de Artefacto sigue en pie: la mejor idea sería establecer una clase contenedora que pueda simular 'mail()' en la prueba unitaria (y, por ejemplo, siempre devuelve 'verdadero' a menos que la dirección de correo electrónico del destinatario no sea válida). –

0

Hay un proyecto llamado MailCatcher que puede ayudar a asegurar que su correo electrónico ha sido enviado (a) y (b) está construido como se pretendía (tiene el contenido que usted puso en él). Nota: este programa no se verifique que su correo electrónico es admisible (es decir: no marcado como correo no deseado o rechazado por un servidor de correo por otras razones)

Mailcatcher es un servicio de SMTP y la interfaz web local para ayudarle a verificar correos electrónicos enviados por su código. Además, los correos electrónicos se pueden verificar mediante programación utilizando la API: por ejemplo:/messages, /messages/:id.json, /messages/:id.html etc. Para usar la API, necesitará algo como Guzzle para Llamadas HTTP La página del proyecto es http://mailcatcher.me/

Un tutorial agradable con enlaces a código de ejemplo: http://codeception.com/12-15-2013/testing-emails-in-php.html

Cuestiones relacionadas