2010-07-31 17 views
6

c'è un modo per testare con PHPUnit (o forse altri framework di test per PHP) se la posta viene inviata correttamente? Devo testare un codice che utilizza la funzione PHP mail(). Con la classe di mailer personalizzata potrei sempre fare finta, ma per mail() ...? Forse c'è qualche plugin che è in grado di usare IMAP e verificare se la posta è ricevuta? (E dovrebbe essere operativo agnostico se è possibile ...)come testare mail() utilizzando PHPUnit

risposta

-4

c'è un modo per testare con PHPUnit (o forse altro ambiente di test per PHP) se la posta viene inviata correttamente?

Se si vuole verificare se mail è stata inviata con successo, non è necessario phpunit, è sufficiente fare:

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

O

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

Note che questo ti dice se è stata inviata o meno la posta NON è stata ricevuta o meno a chi t l'email è stata inviata. Quindi il termine migliore dovrebbe essere consegnato.

+0

destro sul, perché l'unico fallimento è possibile rilevare in modo affidabile è la mancata consegna locale. Controllare se è stato ricevuto in una casella di posta può fallire per una miriade di ragioni. –

+0

non serve per controllare se la posta è stata inviata o meno. è per le prove di unità - ho bisogno di sapere non solo se la posta è stata inviata (nessun problema come ho passato il ritorno di mail()), ma anche se è stato ben formato (intestazioni, contenuto, allegati ecc.) e consegnato al giusto account) –

+0

@ts Non sono sicuro che sia adatto per il test delle unità: sono così tante cose che potrebbero andare storte a seconda della configurazione del server. Direi che questo richiede una finta. –

6

La soluzione sarebbe quella di racchiudere la posta in una classe che potrebbe essere derisa e utilizzarla.

Non vedo il punto nel test mail() stesso, sono sicuro che è stato già testato a fondo.

+0

il mio problema è che mail() è solo una parte del metodo più grande –

+1

@ts Il punto di Artefacto è ancora in piedi: l'idea migliore sarebbe quella di impostare una classe wrapper che possa imitare 'mail()' nel test dell'unità (e, per esempio, restituisce sempre 'true' a meno che l'indirizzo di posta elettronica del destinatario non sia valido.) –

0

C'è un progetto chiamato MailCatcher che può aiutarti a garantire che la tua email sia stata inviata (a) e (b) sia costruita come previsto (contiene il contenuto che hai inserito). Nota questo programma non verifica che la tua email è ricevibile (cioè: non contrassegnati come spam o respinta da un server di posta per altri motivi)

Mailcatcher è un locale di interfaccia del servizio SMTP e web per aiutare a verificare le email inviate dal vostro codice. Inoltre, le e-mail possono essere verificate a livello di codice utilizzando l'API: ad esempio:/messages, /messages/:id.json, /messages/:id.html ecc. Per utilizzare l'API è necessario qualcosa come Guzzle per rendere Chiamate HTTP La pagina del progetto è http://mailcatcher.me/

Un bel tutorial con i collegamenti alle esempio di codice: http://codeception.com/12-15-2013/testing-emails-in-php.html

Problemi correlati