【问题标题】:Delay send emails using MailMessage and SmtpClient or MessageQueue使用 MailMessage 和 SmtpClient 或 MessageQueue 延迟发送电子邮件
【发布时间】:2012-04-27 12:30:27
【问题描述】:

我正在使用SmtpClientMailMessageASP.Net 代码发送电子邮件。 我希望能够根据业务逻辑延迟发送电子邮件。 我将能够生成一个DateTime 对象,说明电子邮件应该何时实际送达。

我知道我可以创建一个 Windows 服务 来使用 Sql Server 数据库作为电子邮件存储来安排电子邮件传递。但我不想在托管服务器上部署额外的服务。

我也知道我可以创建一个SQL Server 工作来实现这一点,但我不想这样做,除非,除非使用纯 ASP.NET 无法实现这一点

需要注意的是,我的代码检查服务器上是否启用了MSMQ。如果是,MessageQueue 类用于电子邮件传递。所以任何关于使用队列实现这一点的建议都会有所帮助。

顺便说一句,解决方案应该适用于两种情况(即SmtpClientMessageQueue

我已经查看了 thisthis 问题及其接受的答案。我不想使用第 3 方产品,除非使用纯 ASP.NET 无法实现这一点

附: .Net Framework版本:3.5,环境应该是IIS 7和Sql Server 2008。

【问题讨论】:

  • 您可以简单地添加一些应用程序逻辑来每 X 分钟发送一次所有待处理的消息。您可以在 Application_Start 事件中连接一个计时器。只要确保您的 asp.net 应用程序在 X 分钟内没有访问者时没有关闭。
  • @CodingBarfield:如果你能展示一些示例代码会很棒吗?我怀疑make sure asp.net application isn't shut down if there are no visitors for X minutes 的努力很高。那么你能写一个答案来显示你的实现方法供我验证吗?
  • @AYKS对不起,我最近使用 asp.net 的时间还不够多,无法提供有保证的工作解决方案。这可能是一个微不足道的 IIS 切换或一些难以做到的事情,但我不能提供任何保证。

标签: c# asp.net email message-queue


【解决方案1】:

经过客户的一些研究和澄清,决定我应该创建一个长时间运行的后台线程,它将在预定的时间处理电子邮件的发送,而不必担心应用程序池是否由于以下原因而关闭不活动。

【讨论】:

    【解决方案2】:

    关于在 asp.net 中保持计时器运行的一些信息,包括关于始终在线场景的精彩评论:

    Start timer on web application start

    您可以使用以下方法来阻止 asp.net 关闭:

    Can you prevent your ASP.NET application from shutting down?

    您可以简单地使用计时器来检查数据库并发送所有待处理的邮件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 2015-09-24
      相关资源
      最近更新 更多