【发布时间】:2015-02-18 02:01:41
【问题描述】:
我正在实施一个 CRM,我需要向我的客户发送邮件。当然,我发现了很多人似乎发现的问题:你不知道邮件是否发送成功。但是,我似乎不明白为什么会这样。
首先,我知道对电子邮件的测试只能通过与控制电子邮件的服务器进行实际对话来完成(使用 MX 记录,然后使用 MAIL FROM 和 RCPT TO 命令),即使这样,服务器也可能拒绝回答这些请求。我想我很清楚,例如,http://verify-email.org/ 这样的网站似乎就是这样工作的。
然后,我从this comment 读到这里的答案,.NET 的SmtpClient 做同样的事情来验证消息是否可以发送,如果它失败,它会抛出一个SmtpFailedRecipientsException。所以我似乎明白了......
但是,我决定尝试向无效地址发送邮件:asdf@asdf.asdf(我希望 .asdf 不是最近批准的新 TLD 之一)。我在http://verify-email.org/ 上使用它,它说它无效(因为显然甚至没有MX 记录),但是当我使用SmtpClient 时它成功了!为什么?
然后我读到this other question(我意识到我不是第一个提出这个问题的人)它说 SMTP 是一种“存储和转发”协议(意味着它可能不会立即尝试发送消息),我也明白……但同时我也觉得矛盾。
asdf.asdf 如何在消息不存在的情况下存储和转发消息?为什么http://verify-email.org/(和其他网络服务,我没有只尝试过这个)得到立即响应而SmtpClient 没有?他们有什么不同?
【问题讨论】:
标签: .net smtp smtpclient email-validation