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

C# 在C语言中延迟发送电子邮件#,c#,.net,asp.net,email,C#,.net,Asp.net,Email,我们正在编写一个功能,在x天内向客户发送提醒电子邮件,只是想知道是否有可能延迟发送电子邮件,就像您在C#中的Outlook(新建邮件>选项按钮>以前不发送)中所做的那样 有人知道这样做的方法吗?SmtpClient是一个非常愚蠢的客户端,不支持这种方式——无论是同步的还是异步的发送都是即时的。您可以使用Exchange集成来实现这一点。不过,我不确定Exchange公开了哪些API。最简单的方法是将邮件与发送时间一起保存在数据库表中,并使用脱机进程定期扫描此表,查找发送时间值已过且未标记为已发送

我们正在编写一个功能,在x天内向客户发送提醒电子邮件,只是想知道是否有可能延迟发送电子邮件,就像您在C#中的Outlook(新建邮件>选项按钮>以前不发送)中所做的那样


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

SmtpClient是一个非常愚蠢的客户端,不支持这种方式——无论是同步的还是异步的发送都是即时的。您可以使用Exchange集成来实现这一点。不过,我不确定Exchange公开了哪些API。最简单的方法是将邮件与发送时间一起保存在数据库表中,并使用脱机进程定期扫描此表,查找发送时间值已过且未标记为已发送的邮件。

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

下面是我要做的:

  • 通过制作表格条目来安排系统中的电子邮件
  • 在表中包含一个“SendDate”列,您可以在该列中设置将来的日期
  • 编写一个每15分钟唤醒一次的Windows服务(例如),并在SendDate
    一种可能性是创建一个在处理“挂起”邮件的计划任务上运行的服务。您可以将挂起的邮件存储在SQL数据库中。(戴夫详细说明了这一点)

    如果你想避免使用“真正的”服务,这篇文章看起来很有希望

    没有

    实现这一点的方法是,应用程序将电子邮件写入队列(可以是数据库、文件、MSMQ等),然后编写一个单独的进程,稍后从该队列读取邮件并发送


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

    这正是我们为支持网站所做的,用于在客户报告的事件被修改时通知客户。唯一的区别是,我们使用SQL Server作业来发送邮件,而不是使用服务。我也这样做。在数据库表中插入电子邮件要快得多,而且你还可以记录发送的电子邮件。我决定使用上面链接中详细介绍的方法,这似乎很好。感谢您可以在EWS 2.0中访问,这让我想知道是否有一个特殊的头,您可以通过SMTP将其设置为对Exchange服务器执行相同的操作: