【发布时间】:2011-04-29 05:53:51
【问题描述】:
我该如何做到这一点? SMTP 类在开发机器上抛出关于找不到 SMTP 服务器的错误。有没有办法在开发机器上测试发送电子邮件?
【问题讨论】:
-
发布您用于发送电子邮件的代码,以及您看到的异常/错误消息。那么有人可能会提供帮助......
标签: asp.net-mvc email
我该如何做到这一点? SMTP 类在开发机器上抛出关于找不到 SMTP 服务器的错误。有没有办法在开发机器上测试发送电子邮件?
【问题讨论】:
标签: asp.net-mvc email
我通常通过为 SmtpClient 创建一个包装器类来做到这一点,然后在我的测试中模拟出包装器。这从我的单元测试中删除了实际的邮件客户端/服务器依赖项。包装器本身比较薄,所以我觉得没有必要为它创建测试。通常我会在我的登台环境中对此类事情进行集成级别测试作为探索性测试。暂存环境通常使用生产邮件服务器,但使用“虚假”数据——例如,客户电子邮件地址替换为我自己的。
话虽如此,我希望客户端即使在您的开发系统上也能正常工作,除非您的邮件服务器受防火墙保护或阻止您的开发系统与其通信。您能否详细说明您遇到的错误是什么?
【讨论】:
您可以将文件转储到磁盘上,通过configuring System.Net.Mail.SmtpClient 使用SpecifiedPickupDirectory 类型的传递方法,我发现an example on SO
【讨论】:
如果没有看到异常,我们无能为力。只要您的开发机器上的详细信息指向正确的 smtp 服务器并具有正确的凭据,那么您的代码就不会成为问题,您应该进一步查看链条。尽管其他一切都正确,但目标机器拒绝了请求,但我有一个例外。在花费了两倍和三倍的时间检查凭据、从我们的服务器发送等之后,我将错误追踪到 McAfee 阻止电子邮件端口 25...
【讨论】:
这有几个可能的原因。
1) 您的代码是否配置为在开发期间使用本地 SMTP 服务器并且您已升级到 Windows 7?您的本地主机上不再有可用的 SMTP 服务器。查找并下载 smtp4dev 以允许您的本地主机捕获发送的电子邮件。
2) 如果您使用远程 SMTP 服务器,请检查您的 windows 防火墙以确认您被允许发送外发邮件。如果是,请确认您的机器/用户名有权通过该服务器发送邮件。到服务器的快速 telnet:25 应该会让您知道您的连接是否被拒绝。
【讨论】:
肖恩,
直接来自我的 web.config:
<smtp deliveryMethod="SpecifiedPickupDirectory">
<network host="ignored" />
<specifiedPickupDirectory pickupDirectoryLocation="c:\email_c#" />
</smtp>
只要能够查看保存到 pickupDirectoryLocation 目录中的“电子邮件”,此功能就可以正常工作。
试一试……
【讨论】:
<configuration> -> <system.net> -> <mailSettings> -> <smtp> ....</smtp>。理论上它应该可以工作。但是请记住,您可能没有该文件夹的用户权限,因此请确保 pickupDirectoryLocation 可以读取/写入以供您登录
假设“测试发送电子邮件”是指发送测试电子邮件而不是正式/单元测试,我喜欢使用 smtp4dev: http://smtp4dev.codeplex.com/
正如页面所解释的,它是一个虚拟的 SMTP 服务器,基本上拦截来自应用程序的传出消息,允许您检查这些消息并确保一切按预期工作。这是一个 Windows 应用程序,如果您正在为 ASP.NET 开发,希望这不是问题。
【讨论】:
我知道这是一个旧线程,但我只是偶然发现了这项服务: http://mailtrap.io/
这真是太棒了。它充当您应用的虚拟 SMTP 服务器,实际上并不发送电子邮件,但允许您在浏览器中(或通过 API)轻松查看它们。
这是杀手。
【讨论】: