如何创建电子邮件发送服务?

时间:2020-03-06 15:02:53  来源:igfitidea点击:

我已经开始研究这个想法了一段时间,并希望阅读想法。

我想创建一个.NET服务来发送和跟踪电子邮件。

我的粗略想法:

  • 在各种应用程序中,序列化.NET电子邮件(System.Net.Mail.MailMessage)对象的实例,并将其放入数据库或者文件系统队列中
  • 邮件服务/进程轮询队列并发送电子邮件
  • 强制执行订阅/取消订阅列表/规则
  • 跟踪打开,跳出,外出自动回复等。
  • 将状态报告回原始应用程序

有人对我应该如何入门或者可能遇到的问题有建议吗?我应该看一下现成的软件/服务吗?

解决方案

我们将需要学习有关SMTP协议的所有知识,即使我们使用的是可以为我们完成大部分工作的高级工具。以我自己使用.NET处理出站和入站电子邮件的经验,直到学会了telnet到SMTP服务器的端口25并通过自己发出命令来发送电子邮件,我才真正获得了它。

如果我们要发送大量电子邮件,并且需要监视NDR(不可交付的报告),则必须将SMTP信封发件人地址设置为我们自己的服务器,并在收到所有这些电子邮件时对其进行解析,以了解发生了什么。

System.Net电子邮件类不允许我们在与MTA的对话中设置MAIL FROM,而无需将电子邮件标头中的"发件人"地址设置为同一对象,因此,如果我们需要这些地址不同。

ListNanny是另一个有助于解析NDR的工具,其中包括其他功能。

我不确定要序列化MailMessage对象。我认为,仅存储单独的数据元素然后在需要时实例化MailMessage对象会更简单。

我们可能会发现一些在webapp中处理未送达电子邮件的答案很有用。

我建议我们认真考虑外包电子邮件服务。我也考虑过为我的Web应用程序构建这样的服务,但是我们还有很多事情要做,最重要的是,这将使我们远离主要Web应用程序的时间(当然,除非我们将此服务作为自己的服务,主要产品)。第三方服务消除了头痛和持续的维护。

如果采用这种方式,则需要定期监视服务器信誉,与大型ISP保持白名单关系,监视和处理退回,为每个ISP设置正确的消息限制,实施DKIM,VERP,SPF等功能。这是针对选择加入的邮件的,主要目标是确保每条发送的邮件都位于用户的邮箱中,而不是垃圾邮件箱中。准备花费比我们意识到更多的时间。

有关交易电子邮件(帐户注册确认,帐户状态报告,账单等),请参阅此SO帖子,了解具有webapp友好API的提供商。

对于营销电子邮件和大量选择加入的邮件,请查看此SO帖子。我刚刚将MailChimp添加到了该列表。