【问题标题】:Delaying the sending of emails in C#在 C# 中延迟发送电子邮件
【发布时间】:2010-10-08 02:03:30
【问题描述】:

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

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

【问题讨论】:

    标签: c# .net asp.net email


    【解决方案1】:

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

    我会这样做:

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

    【讨论】:

    • 这正是我们为我们的支持网站所做的,当他们报告的事件被修改时通知客户。唯一的区别是,我们使用 SQL Server 作业而不是服务来发送邮件。
    • 我也是这样做的。将电子邮件插入数据库表要快得多,您还可以保留已发送电子邮件的记录。
    【解决方案2】:

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

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

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

    【讨论】:

    • 我决定采用上面链接中详述的方法,这似乎工作正常。谢谢
    【解决方案3】:

    没有。

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-26
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-17
      • 2013-03-31
      相关资源
      最近更新 更多