检查邮件是否已在VB.NET中使用SMTPClient成功发送

时间:2011-07-13 13:34:22

标签: vb.net smtp smtpclient

我正在尝试创建一个向smtp-server发送电子邮件的应用程序。

服务器未设置固定,但将根据应将电子邮件发送到的电子邮件地址的域部分进行查找。

示例:

电邮至:test@stackoverflow.com

Domain-Part:stackoverflow.com

MX记录查找的结果(命令行“nslookup -type = mx stackoverflow.com”:

  

stackoverflow.com MX偏好= 30,邮件交换器= stackoverflow.com.s9b1.psmtp.com   stackoverflow.com MX preference = 40,mail exchanger = stackoverflow.com.s9b2.psmtp.com   stackoverflow.com MX preference = 10,mail exchanger = stackoverflow.com.s9a1.psmtp.com   stackoverflow.com MX preference = 20,mail exchanger = stackoverflow.com.s9a2.psmtp.com

知道邮件服务器是否接受了邮件并且邮件已成功发送,这将非常有用。

到目前为止,我能够通过使用System.Net.Mail.SMTPClient对象及其SendAsync函数获取SMTP服务器错误代码(如果出现错误(StatusCode 5xx)。)出现错误,我在SMTPClient的回调事件中得到一个异常对象

我很清楚并不是每个邮件服务器都会告诉我mailaccount是否真的存在,然后用错误代码拒绝我的邮件,而只是接受邮件然后删除它。因此,我将感激另一种方法来检查邮件是否已发送(注意:未读取,这将是读取确认)

最终目的是: 尝试使用域名邮件服务器向收件人发送电子邮件,如果失败,请根据错误代码继续(用户不存在 - > abort / mailserver没有响应 - >使用其他邮件服务器(如果可用)。)

提前致谢(抱歉打字错误:))

1 个答案:

答案 0 :(得分:2)

不幸的是,你所寻找的东西并不存在。电子邮件跳过这么多跳,没有“发送”实际意味着什么的定义。例如,您的stackoverflow示例实际上指向Postini的电子邮件服务器。 Postini可能会将电子邮件从网关传递到AV和路由器。从那里他们可以汇集电子邮件或将其传递给另一个电子邮件服务器。

通过电子邮件,“已发送”的最接近定义是“至少我没有收到错误”。

此外,还有一个小问题,但在使用nslookup时,请记住向域添加尾随句点,否则将使用域搜索列表。一般来说不是什么大不了的事,但每隔一段时间它就会让你失望。

nslookup -type=mx stackoverflow.com.