我目前正在开发一个发送电子邮件的web应用程序。用户在浏览器中执行的操作会创建事件,这些事件会传递到辅助服务器,该服务器会向订阅了这些事件的用户发送电子邮件。
当前用于发送电子邮件的实现基本上是一个自制的SMTP服务器。我认为它是从遗留系统移植到C#的,非常不可靠。
我的要求是能够发送消息,也知道消息的传递状态。如果他们失败了,我想知道为什么,以及他们是否正在重试。
理想情况下,我想放弃自制的SMTP服务器,使用开源解决方案。我知道我可以在机器上运行SMTP服务器(如hMailServer),并使用.NET的SmtpClient连接和发送消息。就其本身而言,这不会让我对消息的状态有太多的了解。
使用hMailServer,您可以使用COM API查询服务器并获取消息状态。这可能吗?这是一种有效的方法吗?
除了我上面概述的,还有其他选择吗?
谢谢!
您的要求是不可行的整体。(你所要求的部分内容是可行的。)
一封电子邮件要经过发件人和收件人之间的多个服务器,您只能控制其中的一些服务器。其余的完全不在你的控制范围内。
你可以捕捉到许多发送失败,但如果第三方垃圾邮件拦截程序在你的电子邮件到达收件人之前阻止了你的电子邮件,你就无法控制该垃圾邮件拦截程序的工作方式。你不能保证它会返回一个原因。
作为一种替代方案,您可以捕捉可能的错误(例如通过hMailServer),除此之外,还可以做电子邮件营销人员所做的事情:跟踪打开的电子邮件,查看哪些电子邮件被阅读
这里有关于如何使用.NET实现这一点的更多信息:http://www.codeproject.com/Articles/15109/Tracking-Emails-for-Open-Read
根据我们的经验,我们使用了Arial software的一款名为Campaign Enterprise的商业软件,该软件能够跟踪您所要求的几乎所有内容,并使用了所描述的"电子邮件打开"技术。它运行得很好,但不是免费的。
可能还有其他选择,但这将是一个产品推荐问题,在这里会偏离主题。我提供以上内容只是作为您自己进行研究的起点,以了解还有哪些其他产品,包括您价格范围内的产品。(尽管这个看起来可能很好,而且是免费的。)
根据以下评论添加:
尝试跟踪可捕获SMTP传输错误的其他选项。
如果你只想知道SMTP会话中的错误,你可以使用内置的.NET工具,并在这里获取会话跟踪:
http://www.systemnetmail.com/faq/4.10.aspx
如果SmtpFailedRecipientsException发生,您也可以获取它。MSDN上提供了带有代码示例的文档。