编程语言
首页 > 编程语言> > 使用C#/ .NET发送电子邮件策略

使用C#/ .NET发送电子邮件策略

作者:互联网

我有一个Web应用程序,应该在特定操作后发送电子邮件.我有一些替代方法来处理这个我不确定哪一个是最好的.

首先,当用户执行操作时,电子邮件将直接从ASP.NET应用程序发送.但我认为这不是一个真正可靠的系统,因为如果SMTP服务器关闭或其他事情发生,用户只会得到一个反馈,他的行动无法完成.

作为替代方案,我正在考虑为我的想法实现排队系统:

>推送电子邮件发送到数据库表,服务应用程序定期检查新消息,然后发送.成功发送后,它标记完成的电子邮件任务.
>使用MSMQ进行排队.在这种情况下,整个电子邮件可以作为消息传递;或者另一种方法是将带有附件的消息存储到db表中,并仅传递查询db表并发送消息所需的数据.在这种情况下,我不必处理MSMQ的大小限制(因为附件).
>其他东西,比如用于通知服务的本地WCF服务

您认为哪种方式最好?

解决方法:

使用MSMQ不是一个好的解决方案,因为每个大小限制为4 MB. http://blogs.msdn.com/b/johnbreakwell/archive/2007/08/22/why-is-there-a-4mb-limit-on-msmq-messages.aspx
更糟糕的情况是,如果MSMQ失败,就像它处理抛出错误或突然关闭一样,它将丢失许多消息.在我的情况下,当硬件和软件几乎是理想的时候,这个解决方案很好

使用数据库和窗口服务更好,因为它很简单,不需要太多努力.

我通常使用数据库和文件的组合.数据库包含用于保存标头信息的表和消息已被操作的标志(成功或错误或其他)和文件包含消息(html或plain)和原始格式的附件.
当运行进程发送时,从文件组装消息比从查询blob / clob更快.
由于他们在应用程序上使用文件系统,因此您可以添加服务器或组件等硬件,或者轻松添加系统的可用性.
数据库也可以添加,但在数据库软件中会花费更多的许可证.
我在x次发送电子邮件后添加测试发送电子邮件,以确保它运行良好;此测试电子邮件将发送到我自己或虚拟收件箱和应用程序,以检查测试电子邮件是否与发送和接收的电子邮件相同.如果相同,则发送待处理的电子邮件将再次继续

如果您使用MS Exchange的另一种方法,您可以使用其Web服务来排队发送使用消息队列.这是一种简单的方法,但您需要许可证.
您可以在MSDN库上看到如何利用MS Exchange Web服务.

标签:c,asp-net-mvc,msmq,email
来源: https://codeday.me/bug/20190626/1293880.html