【发布时间】:2014-12-11 00:26:28
【问题描述】:
我正在向大约 10,000 名注册用户发送电子邮件。过去,我们遇到过并非所有电子邮件都被发送出去的问题。我与邮件服务器管理员交谈,他建议我获取一个由邮件服务器生成的不同代码,以跟踪每封发送的电子邮件。
我从我们的 oracle 数据库中获取我的用户列表,然后一次遍历一个并执行SmtpClient.Send()。对于SmtpClient.Send(),我不确定如何恢复邮件服务器的响应。 Send() 是否可以做到这一点,或者我应该使用其他 SmtpClient 发送电子邮件的方法之一来返回响应?
【问题讨论】:
-
我不知道收到代码。但是一次发送 10K 封电子邮件可能会使服务器不堪重负,或者让您看起来像是在发送垃圾邮件。您可以考虑将电子邮件“分块”成更小的批次,并在更长的时间范围内发送出去。
-
我会问你的邮件服务器管理员他的意思是什么通过 SMTP 发送电子邮件时没有生成任何标识符或跟踪代码。
-
其实,如果 Send 方法没有 Exception 就通过了,你也无能为力。这意味着消息已成功传递到 Smtp 服务器,现在由 Smtp 服务器负责传递消息(有时可能需要一些时间),但您无法在自己身边跟踪它
-
他向我展示了 smtp 服务器在收到电子邮件时会生成一个结果,并且在该结果中他说有一个可识别的代码。在您看来,确保所有电子邮件正确发送到邮件服务器的最佳方法是什么? .net 4.5 最干净的方法是什么?谢谢
-
我认为您的管理员正在考虑文字 SMTP 协议(例如
250 Message Received)。 “已接收”只是服务器的一次握手,让客户端知道它理解请求并可以处理它(而不是最终用户已收到电子邮件)。您的 SmtpClient 库理解这一点并隐式继续(或在 ACK 失败时出现异常)。