【发布时间】:2010-10-08 02:03:30
【问题描述】:
我们正在编写一项功能,在 x 天后向客户发送提醒电子邮件,只是想知道是否可以延迟发送电子邮件,类似于在 Outlook 中的方式(新邮件 > 选项按钮 > 不要在 C# 中交付。
有人知道这样做的方法吗?
【问题讨论】:
我们正在编写一项功能,在 x 天后向客户发送提醒电子邮件,只是想知道是否可以延迟发送电子邮件,类似于在 Outlook 中的方式(新邮件 > 选项按钮 > 不要在 C# 中交付。
有人知道这样做的方法吗?
【问题讨论】:
如果您想将电子邮件提交到 SMTP 服务器以保留数天,则该服务器必须支持此功能。但是,我建议不要这样做。如果您有丢失电子邮件的问题,则可能很难追查。
我会这样做:
【讨论】:
一种可能性是创建一个服务,该服务在处理“待处理”邮件的计划任务上运行。您可以将待处理的邮件存储在 SQL 数据库中。 (戴夫详细说明了这一点)
如果您想避免“真正的”服务,这篇文章看起来很有希望
【讨论】:
没有。
实现这一点的方法是让您的应用程序将电子邮件写入队列(可以是数据库、文件、MSMQ 等),然后编写一个单独的进程,以便稍后从该队列读取邮件并发送。
据我所知,SMTP 协议没有任何“延迟发送”功能。此外,您在 Outlook 中引用的功能实际上只是将其保留在客户端的发件箱中直到指定日期,因此它是客户端功能,而不是服务器端功能。
【讨论】:
SmtpClient 是一个非常愚蠢的客户端,不支持这一点——无论是同步的还是异步的,发送都是即时的。您可以使用 Exchange 集成来完成此操作。不过,我不确定为 Exchange 公开了哪些 API。最简单的方法是将消息与发送时间一起保存在数据库表中,并有一个离线进程定期扫描此表并查找发送时间值已过且未标记的消息已发送。
【讨论】: