用于排队,审阅和拦截电子邮件的电子邮件解决方案?

时间:2011-04-25 16:01:47

标签: .net email testing smtp queue

我们希望解决的电子邮件存在一些问题。

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

我们发送电子邮件的所有代码都通过SendEmail()函数。这可以被重构以使电子邮件在某处排队。我们愿意查看不同的SMTP服务器,构建自定义解决方案或其他内容。

你能给出什么建议?有一种解决方案可以解决这些问题或一组解决方案吗?感谢。

2 个答案:

答案 0 :(得分:0)

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

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

它可以满足您的需求 - 将电子邮件写入将在可能时发送的队列。

  

将电子邮件写入IIS服务器的SMTP   服务提货目录是另一个   System.Net.Mail的新功能。该   SMTP提取目录是一个特殊的   Microsoft的SMTP使用的目录   服务发送电子邮件。任何电子邮件文件   在该目录中找到的处理   并通过SMTP提供。如果   传递过程失败,文件是   存储在队列目录中   另一次送货。如果是致命的   发生错误(例如DNS解析   错误),文件被移动到   坏消息目录。

这当然意味着确保在相关的Web服务器上安装SMTP服务。

这比我们打算下去的路线简单得多,这意味着在某处编写序列化电子邮件(文件系统,数据库等),然后设置服务以尝试按计划发送它们。自从我们实施以来,我们一直没有任何问题。这不是保证,但我只是说,它对我们来说非常好。

答案 1 :(得分:0)

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

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

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

如果要在发送之前查看某些电子邮件,请让批处理文件使用命令行开关启动程序。当SendEmail方法将电子邮件存储在文件中时,请将其写入该值。发送/重试的进程不会发送任何附加了该标志的消息。相反,它将这些放入另一个队列进行审查。