我目前正在开发一个发送电子邮件的网络应用程序。用户在浏览器中执行的操作会创建传递给辅助服务器的事件,辅助服务器会向已订阅这些事件的用户发送电子邮件。
当前发送电子邮件的实现基本上是一个本土的SMTP服务器。我认为它是从遗留系统移植到C#并且它非常不可靠。
我的要求是能够发送消息并了解消息的传递状态。如果他们失败了,我想知道为什么以及他们是否正在重试。
理想情况下,我想废弃本土的SMTP服务器并使用开源解决方案。我知道我可以在一台机器上运行一个SMTP服务器(如hMailServer),并使用.NET的SmtpClient来连接和发送消息。就其本身而言,这不会让我对消息的状态有太多的了解。
使用hMailServer,您可以使用COM API查询服务器并获取消息状态。这可能吗?这是一种有效的方法吗?
除了我上面概述的内容,还有其他选择吗?
谢谢!
答案 0 :(得分:2)
您所要求的内容 完全不可行 。 (你提出的部分内容是可行的。)
电子邮件通过发件人和收件人之间的多个服务器,您只能控制其中一些服务器。其余的完全不受你的控制。
您可以捕获许多发送失败,但如果第三方垃圾邮件拦截器阻止您的电子邮件到达收件人之前,您就无法控制垃圾邮件拦截器的工作方式。你无法保证它会返回原因。
作为替代方案,您可以捕获可能的错误(例如,通过hMailServer)以获取或超过该错误,执行电子邮件营销人员的操作:跟踪电子邮件打开以查看哪些电子邮件正在 读取 即可。这显然不同于交付。
有关如何使用.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