.net 用于排队、查看和拦截电子邮件的电子邮件解决方案?

.net 用于排队、查看和拦截电子邮件的电子邮件解决方案?,.net,email,testing,smtp,queue,.net,Email,Testing,Smtp,Queue,我们希望解决一些电子邮件问题 如果SMTP服务器关闭,我们希望批处理作业将它们在某处创建的电子邮件排入队列,这样我们就不必重新运行作业。什么是好的排队系统?您如何将队列中的电子邮件发送到SMTP服务器 默认情况下,调试时,我们不希望发送电子邮件。我们曾经遇到过一些情况,开发人员在执行代码时无意中向用户发送电子邮件。我们怎样才能防止这种情况再次发生 有时,开发人员可能需要通过附加调试器并单步执行指向生产数据的代码来手动运行批处理作业。在这种情况下,批处理作业发送的任何电子邮件,我们都希望能够在实

我们希望解决一些电子邮件问题

  • 如果SMTP服务器关闭,我们希望批处理作业将它们在某处创建的电子邮件排入队列,这样我们就不必重新运行作业。什么是好的排队系统?您如何将队列中的电子邮件发送到SMTP服务器
  • 默认情况下,调试时,我们不希望发送电子邮件。我们曾经遇到过一些情况,开发人员在执行代码时无意中向用户发送电子邮件。我们怎样才能防止这种情况再次发生
  • 有时,开发人员可能需要通过附加调试器并单步执行指向生产数据的代码来手动运行批处理作业。在这种情况下,批处理作业发送的任何电子邮件,我们都希望能够在实际发送之前进行查看。是否有一种简单的方法可以在所有发送的电子邮件中识别这些电子邮件,然后暂停发送电子邮件足够长的时间来查看
所有发送电子邮件的代码都通过sendmail()函数完成。可以对其进行重构,使电子邮件在某处排队。我们愿意看看不同的SMTP服务器,构建一个定制的解决方案,或者其他什么


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

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

它完成了你想要的功能——将电子邮件写入一个队列,在可能的情况下发送

将电子邮件写入IIS服务器的SMTP 服务拾取目录是另一个 System.Net.Mail的新功能。这个 SMTP分拣目录是一个特殊的 Microsoft的SMTP使用的目录 发送电子邮件的服务。有电子邮件文件吗 在该目录中找到的文件将被处理 并通过SMTP发送。如果 传递过程失败,文件被删除 存储在队列目录中,用于 另一时间交货。如果是致命的 发生错误(例如DNS解析) 错误),文件将移动到 死信目录

当然,这意味着要确保SMTP服务安装在相关的web服务器上


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

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

void SendEmail()
{
#if DEBUG
    // do nothing
#else
    // do normal send
#endif
}
如果您想要在SMTP可能中断的情况下工作,则需要将其排入文件队列,并让单独的进程读取该文件并发送电子邮件,然后根据需要重试

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