c# - 如何最好地管理 SMTP 客户端

标签 c# email smtpclient

MSDN docs for SmptClient说实例成员不能保证是线程安全的(通过使用实例属性来存储诸如 reference source 中的 MailWriter 之类的东西而诞生)。

另一方面,this post (以及我的经验)表明,简单地为发送的每封电子邮件创建和处置 SmtpClient 可能会导致您很容易达到连接限制。

管理这些对象的最佳方式是什么?我是否必须使用信号量手动创建池或限制使用?或者,是否有一些更容易遵循的模式。我总是使用同一个邮件服务器。

最佳答案

我建议使用持久性 MessageQueue(例如 RabbitMQ)将事件和有效负载发送到该队列。我将编写一个消费者来读取该队列,并将其发送到电子邮件服务,该服务将处理发送、记录和引发您可能因 BI 原因而想要跟踪的其他电子邮件事件。

话虽这么说,如果您每天发送数千封电子邮件,则需要验证您的 IP 地址才能发送此类负载。此过程需要很长时间,但一旦该 IP 通过认证,您应该不会遇到任何问题。

关于c# - 如何最好地管理 SMTP 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30766651/

相关文章:

c# - 返回未知数据类型

java - 通过 java i 发送带有阿拉伯语内容的电子邮件

javascript - 将 jQuery 生成的值传递给 PHP Mail

html - 无法创建文本论坛

.NET MailMessage 和 SMTPClient 被标记为垃圾邮件?

c# - 仅在某些计算机上获得 "no connection could be made because the target machine actively refused it"

c# - 如何为附加属性设置动画?

c# - 在 C# 中使用十六进制文字将整数设置为负值

c# - 迭代列表,但无法访问不同的项目值

.net - System.Net.Mail.SmtpClient 是否支持 CRAM-MD5 身份验证?