2010-07-31 12 views
6

est-il un moyen de tester avec PHPUnit (ou peut-être d'autres framework de test pour PHP) si le courrier est envoyé correctement? Je dois tester un code qui utilise la fonction PHP mail(). Avec la classe mailer personnalisé je pourrais toujours faire un faux, mais pour mail() ...? Peut-être qu'il existe un plugin capable d'utiliser IMAP et de vérifier si le courrier est reçu? (Et il devrait être OS agnostique s'il est possible ...)comment tester mail() en utilisant PHPUnit

Répondre

-4

est-il un moyen de tester avec PHPUnit (ou peut-être autre framework de test pour PHP) si le courrier est envoyé correctement?

Si vous voulez vérifier si courrier a été envoyé avec succès, vous n'avez pas besoin PHPUnit, vous faites simplement:

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

Ou

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

Remarque que cela vous indique si le courrier a été envoyé PAS si oui ou non il a été reçu à qui t L'email a été envoyé. Donc, le meilleur terme ici devrait être livré.

+0

droit, parce que le seul échec, vous pouvez détecter de manière fiable est l'échec de l'administration locale. Vérifier si elle a été reçue dans une boîte de réception peut échouer pour une myriade de raisons. –

+0

ce n'est pas pour vérifier si le courrier a été envoyé ou non. c'est pour les tests unitaires - j'ai besoin de savoir non seulement si le courrier a été envoyé (pas de problème car je passe le retour de mail()), mais aussi s'il était bien formé (en-têtes, contenu, pièces jointes etc) –

+0

@ts Je ne suis pas vraiment sûr que ce soit adapté aux tests unitaires - ils sont tellement de choses qui pourraient mal tourner en fonction de la configuration du serveur. Je dirais que cela appelle un simulacre. –

6

La solution ici serait d'emballer le courrier dans une classe qui pourrait être tournée en dérision et de l'utiliser à la place.

Je ne vois pas le point de tester mail() lui-même, je suis sûr qu'il a déjà été testé de manière approfondie.

+0

mon problème est que mail() n'est qu'une partie de la méthode plus grande –

+1

@ts Le point d'Artefacto est toujours: La meilleure idée serait de mettre en place une classe wrapper qui peut se moquer de 'mail()' dans le test unitaire (et, disons, renvoyez toujours 'true', sauf si l'adresse e-mail du destinataire n'est pas valide.) –

0

Il existe un projet appelé MailCatcher qui peut vous aider à vous assurer que votre e-mail a été envoyé et que b) est construit comme prévu (il contient le contenu que vous y avez ajouté). Notez que ce programme ne vérifie pas que votre email est recevable (ie: non marqué comme spam ou rejeté par un serveur mail pour d'autres raisons)

Mailcatcher est un service SMTP local et une interface web pour vous aider à vérifier les emails envoyés par votre code. En outre, les e-mails peuvent être vérifiés par programmation en utilisant l'API: par exemple:/messages,/messages /: id.json,/messages /: id.html etc. Pour utiliser l'API, vous aurez besoin de quelque chose comme Guzzle pour faire le Les appels HTTP La page du projet est http://mailcatcher.me/

Un tutoriel agréable avec des liens vers des exemples de code: http://codeception.com/12-15-2013/testing-emails-in-php.html