一个邮件解决方案,用于排队,审查和拦截电子邮件



我们有几个电子邮件的问题,我们正在寻找解决。

  • 如果SMTP服务器关闭,我们希望我们的批处理作业将它们创建的电子邮件排队到某处,这样我们就不必重新运行作业。什么是好的排队系统?如何将队列中的电子邮件发送到SMTP服务器?
  • 默认情况下,在调试时,我们不希望发送电子邮件。我们遇到过一些开发人员在执行代码时无意中向用户发送电子邮件的情况。我们怎样才能防止这种事情再次发生呢?
  • 有时候,开发人员可能需要通过附加调试器和逐步执行指向生产数据的代码来手动运行批处理作业。在这种情况下,任何由批处理作业发送的电子邮件,我们都希望能够在它实际发送之前进行审查。有没有一种简单的方法可以在所有发出的邮件中识别出这些邮件,然后暂停发送足够长的时间来检查它?

所有发送电子邮件的代码都要经过SendEmail()函数。这可以重构为让电子邮件在某个地方排队。我们愿意看看不同的SMTP服务器,建立一个自定义的解决方案,或者其他的。

你能给什么建议?是否有一个或一组解决方案可以处理这些问题?谢谢。

我们通过使用try/catch解决了SMTP服务器不可用的问题-如果标准SMTP服务器不可用,我们使用IIS提供的SMTP服务,写入SMTP拾取目录,如下所示:

http://systemnetmail.com/faq/4.7.aspx

它做你想要的——把邮件写到一个队列,当可能的时候会发送。

向IIS服务器的SMTP发送电子邮件服务接机目录是另一个System.Net.Mail的新特性。的SMTP收件目录是特殊的Microsoft SMTP使用的目录发送邮件的服务。任何电子邮件文件在该目录中找到的将被处理并通过SMTP发送。如果交付过程失败,文件存储在队列目录中另一个时间交货。如果是致命的发生错误(如DNS解析)错误),文件被移动到Badmail目录。

这意味着,当然,确保SMTP服务安装在有问题的web服务器上。

这比我们打算走的路线要简单得多,这意味着要在某个地方(文件系统,数据库等)编写序列化的电子邮件,然后设置一个服务来尝试按计划发送它们。我们没有任何问题,因为我们实现了这一点。这不是保证,但我只是说,这对我们来说很好。

如果您想在运行调试版本时防止发送电子邮件,您可以这样写:

void SendEmail()
{
#if DEBUG
    // do nothing
#else
    // do normal send
#endif
}

如果您想要某些东西在面对可能的SMTP中断时仍能工作,您需要将它们排队到一个文件,并让一个单独的进程读取该文件并发送电子邮件,并根据需要重试。

如果你想在发送邮件前检查一些邮件,让批处理文件用命令行开关启动程序。当SendEmail方法在文件中存储电子邮件时,让它写入该值。发送/重试的进程将不会发送任何带有该标志的消息。相反,它会将它们放到另一个队列中进行审查。

最新更新