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

时间:2009-02-17 12:57:37

标签: c# .net asp.net email

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

有没有人知道这样做的方法?

4 个答案:

答案 0 :(得分:9)

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

这就是我要做的事情:

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

答案 1 :(得分:3)

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

如果您想避免“真正的”服务

,本文看起来很有意义

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

答案 2 :(得分:3)

没有

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

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

答案 3 :(得分:1)

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