如何使用PHPUnit测试mail()

时间:2010-07-31 20:47:16

标签: php unit-testing email testing phpunit

有没有办法用PHPUnit(或者其他PHP测试框架)测试邮件是否正确发送?我必须测试使用PHP函数mail()的代码。使用自定义邮件程序类我可以随时进行模拟,但对于mail()...?也许有一些插件能够使用IMAP并验证是否收到邮件? (如果可能的话,它应该与操作系统无关......)

3 个答案:

答案 0 :(得分:6)

这里的解决方案是将邮件包装在可以模拟的类中,然后使用它。

我没有看到测试mail()本身的重点,我确信它已经过全面测试。

答案 1 :(得分:0)

有一个名为MailCatcher的项目可以帮助确保您的电子邮件已发送(a)并且(b)按预期构建(它包含您放入其中的内容)。 请注意,此程序不会验证您的电子邮件是否可接收(即:未标记为垃圾邮件或由于其他原因被邮件服务器拒绝)

Mailcatcher是一个本地SMTP服务和Web界面,可帮助您验证代码发送的电子邮件。此外,可以使用API​​以编程方式验证电子邮件:例如:/ messages,/ message /:id.json,/ message /:id.html等。 要使用API​​,您需要使用像Guzzle这样的HTTP来进行HTTP调用。 项目页面为http://mailcatcher.me/

一个很好的教程,其中包含指向示例代码的链接:http://codeception.com/12-15-2013/testing-emails-in-php.html

答案 2 :(得分:-4)

  

有没有办法用PHPUnit进行测试   (或者可能是其他测试框架)   PHP)如果邮件发送正确吗?

如果您想检查邮件是否已成功发送,您不需要phpunit,只需执行以下操作:

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

或者

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

注意 ,它会告诉您邮件是否已发送,而不是是否收到了发送电子邮件的人。所以这里更好的术语应该是 交付