我目前正在开发一个发送电子邮件的web应用程序。用户在浏览器中发生的操作创建事件,这些事件被传递到向订阅了这些事件的用户发送电子邮件的辅助服务器。
当前用于发送电子邮件的实现基本上是自行开发的SMTP服务器。我认为它是从遗留系统移植到C#的,这是非常不可靠的。
我的要求是能够发送消息,并知道消息的传递状态。如果他们失败了,我想知道为什么,以及他们是否正在重试。
理想情况下,我希望废弃自己开发的SMTP服务器,并使用开源解决方案。我知道我可以在机器上运行SMTP服务器(如hMailServer),并使用.NET的SmtpClient连接和发送消息。就其本身而言,这并不能让我深入了解消息的状态。
看起来,使用hMailServer可以使用COM查询服务器并获取消息状态。这个是可能的吗?这是一个有效的方法吗?
除了我上面概述的之外,还有其他选择吗?
谢谢!
发布于 2012-07-19 00:28:11
您所要求的并不是完全可行的。(您所要求的部分内容是可行的。)
一封电子邮件要经过发件人和收件人之间的多个服务器,您只能控制其中的一部分。其余的完全不受你的控制。
您可以捕获许多发送失败,但如果第三方垃圾邮件阻止程序阻止您的电子邮件到达收件人之前,您无法控制垃圾邮件阻止程序的工作方式。你不能保证它会返回一个原因。
作为另一种选择,您可以捕获可能获取的错误(例如,通过hMailServer ),然后执行电子邮件营销人员的操作:跟踪电子邮件的打开情况,以查看哪些电子邮件正在被read。显然,这与交付是不同的。
这里有更多关于如何使用.NET做到这一点的信息:http://www.codeproject.com/Articles/15109/Tracking-Emails-for-Open-Read
根据我们的经验,我们使用了来自Arial Software的名为Campaign Enterprise的商业软件,它提供了跟踪您所要求的几乎所有东西的能力,并使用了所述的“电子邮件打开”技术。它工作得很好,但它不是免费的。
可能还有其他选择,但这将是一个产品推荐问题,并将在这里离题。我提供上述内容仅仅是为了让您自己研究一下还有哪些产品存在,包括那些在您的价格范围内的产品。(尽管this one看起来可能很好,而且是免费的。)
根据下面的评论添加:
用于尝试跟踪可捕获的SMTP传输错误的其他选项。
如果您想知道的只是来自SMTP会话的错误,您可以使用内置的.NET工具,并在此处获取会话跟踪:
http://www.systemnetmail.com/faq/4.10.aspx
如果发生这种情况,您还可以获取SmtpFailedRecipientsException。Documentation with code sample available at MSDN。
https://stackoverflow.com/questions/11545973
复制相似问题