我们希望解决的电子邮件存在一些问题。
我们发送电子邮件的所有代码都通过SendEmail()函数。这可以被重构以使电子邮件在某处排队。我们愿意查看不同的SMTP服务器,构建自定义解决方案或其他内容。
你能给出什么建议?有一种解决方案可以解决这些问题或一组解决方案吗?感谢。
答案 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
方法将电子邮件存储在文件中时,请将其写入该值。发送/重试的进程不会发送任何附加了该标志的消息。相反,它将这些放入另一个队列进行审查。