1

我目前正在开发一个发送电子邮件的 Web 应用程序。用户在浏览器中执行的操作会创建事件,这些事件会传递到辅助服务器,该服务器将电子邮件发送给订阅这些事件的用户。

当前发送电子邮件的实现基本上是一个自制的 SMTP 服务器。我认为它是从遗留系统移植到 C# 的,而且非常不可靠。

我的要求是能够发送消息并知道消息的传递状态。如果他们失败了,我想知道为什么以及他们是否正在重试。

理想情况下,我想放弃自制的 SMTP 服务器并使用开源解决方案。我知道我可以在机器上运行 SMTP 服务器(如 hMailServer)并使用 .NET 的 SmtpClient 连接和发送消息。就其本身而言,这不会让我深入了解消息的状态。

看起来使用 hMailServer,您可以使用 COM API 来查询服务器并获取消息状态。这可能吗?这是一种有效的方法吗?

除了我上面概述的,还有其他选择吗?

谢谢!

4

1 回答 1

2

你所要求的完全不可行。(您所问的部分内容是可行的。)

一封电子邮件通过发件人和收件人之间的多个服务器,您只能控制其中的一些。其余的完全不受您的控制。

您可以捕获许多发送失败,但如果第三方垃圾邮件阻止程序在您的电子邮件到达收件人之前阻止了您的电子邮件,您将无法控制该垃圾邮件阻止程序的工作方式。你不能保证它会返回一个原因。

作为替代方案,您可以捕获可能出现的错误(例如通过 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 上提供了带有代码示例的文档

于 2012-07-18T16:28:11.137 回答