延迟在C#中发送电子邮件

我们正在编写一个function,可以在x天内向客户发送提醒电子邮件,并且想知道是否可以延迟发送类似于Outlook中的电子邮件(新邮件>选项按钮>之前不提供)在C#中。

有谁知道这样做的方法?

一种可能性是创建一个在计划任务处理“待处理”邮件上运行的服务。 您可以将挂起的邮件存储在SQL数据库中。 (戴夫详细说明)

如果您想避免“真正的”服务,本文看起来很有意义

http://www.codeproject.com/KB/aspnet/ASPNETService.aspx

如果要将电子邮件提交到SMTP服务器以保留数天,则服务器必须支持此function。 不过,我建议不要这样做。 如果您在丢失电子邮件时遇到问题,可能很难追踪。

这就是我要做的事情:

  1. 通过创建表条目来安排系统中的电子邮件。
  2. 在表格中包含“SendDate”列,您可以在其中设置日期
  3. 编写一个每15分钟唤醒一次的Windows服务(例如)并在该表中发送SendDate

没有。

实现此目的的方法是让您的应用程序将电子邮件写入队列(可能是数据库,文件,MSMQ等),然后编写一个单独的进程,以后再从该队列中读取邮件并发送它。

据我所知,SMTP协议没有任何“延迟发送”function。 此外,您在Outlook中引用的function实际上只是将其保留在客户端的发件箱中,直到指定日期,因此它是客户端function,而不是服务器端function。

SmtpClient是一个非常愚蠢的客户端,并不支持这一点 – 无论是同步还是异步,发送都是即时的。 您可以使用Exchange集成来执行此操作。 不过,我不确定为Exchange公开了哪些API。 最简单的方法是将消息与发送时间一起保存在数据库表中,并有一个离线进程定期扫描此表并查找其发送时间已超过并且未标记的消息发送。