【问题标题】:ASP.NET Email PatternsASP.NET 电子邮件模式
【发布时间】:2010-08-11 00:12:50
【问题描述】:

ASP.NET Webforms 应用程序。

问题:如何优雅地实现电子邮件发送?

应用程序的许多部分都需要它。这将包括 HTML 电子邮件、如何处理退回邮件的解决方案等。

我可以选择使用自己的 SMTP 服务器(应用托管在 VPS 上),或使用托管服务提供商。

我也想在这里开始记录(可能是 log4net)

对库使用/模式来实现有什么建议吗?

编辑:http://martinnormark.com/2010/03/13/generate-html-e-mail-body-in-c-using-templates

我喜欢调试捕获 asp.net net.mail - route all emails to a different email address in debug mode

【问题讨论】:

    标签: c# asp.net design-patterns email


    【解决方案1】:

    要使用伪造的 SMTP 服务器进行测试,请使用 ndumbster。 Phil Haack 有一篇关于用法的博文 - http://haacked.com/archive/2006/05/30/ATestingMailServerForUnitTestingEmailFunctionality.aspx

    正如您所指出的,电子邮件模板非常棒。考虑为 HTML 和纯文本创建模板。确保您的 HTML 电子邮件模板使用基本 HTML,因为许多电子邮件客户端不符合现代浏览器标准(例如,使用 Word HTML 呈现引擎的 Outlook)。

    Log4Net 是开始记录日志的好方法。您还可以使用 System.Diagnostics 进行简单的跟踪和调试,可以轻松地将其写入事件日志或文件。我总是更喜欢为所有日志记录一个包装器,这样如果您发现以后因为必须具备的功能而想换掉日志框架,就可以轻松地换掉它们。从可测试性的角度来看,它也很好,因为您可以轻松地对其进行模拟。

    实际上,只要您没有被列入黑名单,您使用哪个 SMTP 服务器并不重要。确保对照DNSBL 检查 SMTP 服务器 IP,以便了解您的 SMTP 主机是否声誉不佳。我强烈建议使用 Barracuda Central 的 IP 信誉检查它 - http://www.barracudacentral.org/lookups。还要确保您的 SMTP 服务器支持在收件人使用 grey listing 时重新发送。

    对于退回邮件,您可以设置一个 POP 帐户以将其发送回,它可以像阅读电子邮件并查找拒绝来自哪个电子邮件帐户以及上一封电子邮件的主题(应该是唯一的)一样简单这样您就可以稍后再次发送或在多次退回后将其从列表中删除。要实现阅读 POP,请查看此线程 - Reading Email using Pop3 in C#

    【讨论】:

      【解决方案2】:

      您可以实施的最好的模式是不要直接从您的 Web 应用程序发送电子邮件,从而为自己省去很多麻烦。相反,将电子邮件(或生成电子邮件所需的信息)写入数据库,并让一个单独的进程进行邮寄。

      考虑当您的 smtp 服务器关闭并且您的应用尝试发送时会发生什么。如果您有一个单独的进程发送电子邮件,您可以稍后在其备份时发送电子邮件。

      您还可以对外发电子邮件进行速率限制。如果您最终获得了 Next Big Thing®,您会很高兴您现在能够确定外发邮件的优先级或分批发送邮件列表,而不是在网站流量高峰时破坏您的 smtp 服务器。

      如果您正在处理退回邮件,则只需让此流程处理即可。现在,您可以将返回的电子邮件地址记录到黑名单中,并针对每封外发电子邮件检查同一个列表。您绝对不想将所有这些都放在您的网络应用程序中。

      无论您想出什么其他方法,请考虑只编写要发送到数据库的电子邮件,然后让您的应用继续其业务。您仍然可以近乎实时地发送消息,但您可以毫不费力地实现真正良好的关注点分离。

      【讨论】:

        【解决方案3】:

        至于收到的消息,我在hMailServer 上取得了巨大的成功,它是Microsoft Windows 的免费电子邮件服务器。它支持常见的电子邮件协议(IMAP、SMTP 和 POP3),并且可以轻松地与许多现有的网络邮件系统集成。它具有灵活的基于分数的垃圾邮件保护,并且可以附加到您的病毒扫描程序以扫描所有传入和传出的电子邮件。绝对值得研究。

        对于外发电子邮件,我喜欢我在本文中表达的模式:.NET MailMessage, LinkedResources, AlternateViews and Exceptions

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-09-11
          • 1970-01-01
          • 2012-06-11
          • 2015-11-11
          • 2013-10-25
          • 2012-12-11
          • 2016-09-15
          • 1970-01-01
          相关资源
          最近更新 更多