【发布时间】:2017-07-12 19:59:50
【问题描述】:
在通过电子邮件通知的应用程序上工作。我想在不向生产服务器和客户端发送电子邮件的情况下运行测试。几年前,我记得有人用糟糕的电子邮件循环关闭了我们的交换服务器,并且不想重复......
对开发设置有什么建议吗?目前认为一个简单的 SMTP 服务器就可以完成这项工作,但我不熟悉那个空间。我需要能够查看发送到服务器的所有电子邮件,但它们永远不应该被传递。
谢谢。
【问题讨论】:
在通过电子邮件通知的应用程序上工作。我想在不向生产服务器和客户端发送电子邮件的情况下运行测试。几年前,我记得有人用糟糕的电子邮件循环关闭了我们的交换服务器,并且不想重复......
对开发设置有什么建议吗?目前认为一个简单的 SMTP 服务器就可以完成这项工作,但我不熟悉那个空间。我需要能够查看发送到服务器的所有电子邮件,但它们永远不应该被传递。
谢谢。
【问题讨论】:
Papercut 非常适合您的需求。在过去的几个月里,它一直是公开的。我已经使用它一个月了。测试电子邮件功能再简单不过了。
【讨论】:
设置一个传递到文件的别名非常简单,而不是通过任何主要 Unix/Linux 邮件服务器(如 Postfix 或 Sendmail)中的任何传递机制。在测试期间,您可以跟踪该文件以查看邮件是否按预期发送。测试结束后,您可以将其重定向到它真正应该去的任何地方。
【讨论】:
您可以使用Mailtrap。您可以在登台服务器或开发服务器上进行设置。它易于使用,您也可以使用生产电子邮件地址。所有电子邮件都将被困在 mailtrap 的电子邮件收件箱中。 设置起来更容易。
【讨论】:
根据您的电子邮件机制,另一种选择是制作一个 testmail.(py,php,sh) 脚本,该脚本记录提供的所有参数并将它们转储到带有事件时间戳的标签表中。它并不优雅,但可以用于调试。技巧完全取决于您发送电子邮件的方式。
同样,如果您使用 smtp 而不是 sendmail,则编写一个 ghetto 应用程序,该应用程序侦听某个高范围的端口号,然后以正确的值无声地回复。
【讨论】:
您的问题没有描述环境,但如果您使用的是 OO 语言(例如 Java),则可以使用依赖注入。写一个MessageSender接口,有两个实现;一个 (EmailMessageSender) 实际发送电子邮件,而另一个 (FileMessageSender) 捕获字符串中的消息。
单独编写和测试EmailMessageSender;确认无误后上架。
针对MessageSender 编写系统的其他部分,并使用FileMessageSender 的(注入)实例对其进行测试。 (如果FileMessageSender 也允许检索“已发送消息”的内容,那么您可以在单元测试中使用它。)
验证系统的其余部分后,使用(再次通过注入)正确配置的 EmailMessageSender 实例部署它。
【讨论】:
为什么不简单地将电子邮件列表输出到文本文件并断开对邮件服务器的任何调用?
【讨论】: