.net 为什么可以';我不知道发送邮件是否失败吗?
我正在实施一个CRM,在这里我需要向客户发送邮件。当然,我发现了很多人似乎都发现的问题:你不知道邮件是否成功发送。然而,我似乎不太明白为什么会这样 首先,我明白,只有通过实际与控制电子邮件的服务器对话(使用MX记录,然后使用.net 为什么可以';我不知道发送邮件是否失败吗?,.net,smtp,smtpclient,email-validation,.net,Smtp,Smtpclient,Email Validation,我正在实施一个CRM,在这里我需要向客户发送邮件。当然,我发现了很多人似乎都发现的问题:你不知道邮件是否成功发送。然而,我似乎不太明白为什么会这样 首先,我明白,只有通过实际与控制电子邮件的服务器对话(使用MX记录,然后使用邮件FROM和RCPT to命令),才能完成电子邮件测试,即使如此,服务器也可能拒绝回答这些请求。我想我已经很清楚了,例如,这就是网站喜欢的工作方式 然后,我从读到这里的一个答案,.NET的SmtpClient做同样的事情来验证消息是否可以发送,如果失败,它会抛出一个Smtp
邮件FROM
和RCPT to
命令),才能完成电子邮件测试,即使如此,服务器也可能拒绝回答这些请求。我想我已经很清楚了,例如,这就是网站喜欢的工作方式
然后,我从读到这里的一个答案,.NET的SmtpClient
做同样的事情来验证消息是否可以发送,如果失败,它会抛出一个SmtpFailedRecipientsException
。所以我似乎明白了
但随后,我决定尝试向无效地址发送邮件:(我希望。asdf不是最近批准的新TLD之一)。我在上使用它,它说它无效(因为显然,甚至没有MX记录),但当我使用SmtpClient
时,它成功了!为什么?
然后我读到(我意识到我不是第一个问这个问题的人)其中说SMTP是一种“存储转发”协议(意味着它可能不会立即发送消息),我也理解。。。但同时我发现矛盾
当消息根本不存在时,如何存储和转发它?为什么(以及其他web服务,我没有只尝试这一个)会得到即时响应,而
SmtpClient
没有?他们的做法有什么不同?让我们了解一下邮件是如何流动的(过于简化):
因此,当您向位于同一服务器上的收件人发送邮件时,例如,如果您的Exchange服务器在内部位于同一域中,则服务器会知道您的收件人是否存在,并且可以立即回复您
但是,当您向外部收件人发送邮件时,您的服务器会将邮件转发到邮件服务器(由域名的MX记录标识)。发生这种情况时,会发生两件事:
smtpClient
发送邮件时,您不会直接连接到收件人的服务器。您可以使用智能主机,也可以使用自己的邮件服务器。您通过服务器进行身份验证,然后服务器将转发您的邮件。使用VRFY
和/或RCPT TO
的方法将对您的服务器起作用。只要收件人在同一台服务器上,您(smtpClient
)就可以针对您自己的服务器工作,而您自己的服务器可以做出响应。但是,当您将邮件转发给外部服务器时,服务器将只接受您的邮件,无法响应
如果需要响应,则必须直接连接到目标服务器并在那里发出SMTP
命令。在这种情况下,您可能会收到响应,也可能不会收到响应。您链接到的线程中也清楚地回答了这一问题。作为一种反垃圾邮件措施,几乎所有的服务器都采用了tarpitting(换句话说,延迟或黑洞)来防止其用户计数
无论您是否将邮件发送到“someone@example.com“或”noone@nowhere.xyz,只要它是外部服务器。我上面给出的例子过于简化了。实际上,可能有几种中介服务为您的电子邮件服务器解析DNS
您给出了“”的示例。但是,你读过它在主页上的内容吗
此电子邮件验证工具实际上连接到邮件服务器和
检查邮箱是否存在
这意味着它直接连接到您试图向其发送邮件的域的MX服务器。即使你也能做到。唯一的区别是,在现实生活中,我们的应用程序无法做到这一点。您可以连接到本地smarthost/relay
此外,该服务的主页上还显示:
正在验证的内容:格式:name@domain.xxx"; 有效域:
"somebody@new.york“无效;有效用户:验证用户是否有效;和
邮箱真的存在吗
这意味着,在尝试连接到目标服务器之前,此服务先检查格式(可能是正则表达式),然后执行DNS查找以检查域是否有效,然后仅在该格式之后尝试连接到目标服务器
请记住,即使是这项服务也无法准确地告诉您,对于所有电子邮件服务的用户的存在,您想要什么。例如,我在我的电子邮件服务器上使用了tarpitting,因此即使是这项服务也无法告诉你我是否存在。我的邮件服务器永远不会响应。“verify email.org”将始终返回ok
给您所有信息
顺便说一句:“verify email.org”通常会将此邮件返回给您:
550 5.7.1 Service unavailable; Client host [verify-email.org] blocked using Spamhaus;
此服务已被多个反垃圾邮件服务提供商阻止
希望有帮助
.谢谢,现在我明白发生了什么事。我想最好不要担心我系统中失败的收件人,让邮件服务自己处理。
550 5.7.1 Service unavailable; Client host [verify-email.org] blocked using Spamhaus;