我们先来了解邮件如何流动(过于简化):
Your App > Your Mail Server > Destination Mail Server > Recipient
| ^
| |
+ ---- if recipient on the same server ----+
所以,当你发送邮件给收件人谁是在同一台服务器上,例如,如果在相同的域名Exchange Server在内部,则服务器知道您的收件人是否存在,并且可以立即回复您。
但是,当您向外部收件人发送邮件时,您的服务器会将电子邮件转发到邮件服务器(由MX域名记录标识)。发生这种情况时,发生两件事情:
- 您的服务器欣然接受它出自于你,并把你的接受交付ACK立即
- ,然后尝试基于其当前队列中的邮件转发到外部服务器
它不会让您的应用无限期地等待,直到队列清除并实际发送消息。如果这样做,你的应用程序可能会等待4天!
关于您链接的其他问题/答案,他们假设收件人位于同一台服务器上。
通常,当您通过应用程序使用smtpClient
发送邮件时,您不会直接连接到收件人的服务器。您使用智能主机或您自己的邮件服务器。您通过您的服务器进行身份验证,然后该服务器会中继您的邮件使用VRFY
和/或RCPT TO
的方法将对您的服务器起作用。只要收件人位于同一台服务器上,您(smtpClient
就可以)将对您自己的服务器起作用,哪些服务器可以响应。但是,当您为外部服务器转发邮件时,您的服务器将只接受您的邮件并且无法回复。
如果您需要回应,那么您将不得不直接连接到目标服务器,并在那里发出SMTP
命令。在这种情况下,您可能会收到回复,也可能不会收到回复。这也已在您链接的主题中得到明确回答。作为一种反垃圾邮件措施,几乎所有服务器都使用tarpitting(换句话说,延迟或黑洞)来防止列举其用户。
如果您要发送邮件给“[email protected]”或“[email protected]”,只要它是一个外部服务器没关系。我上面给出的例子过于简单。实际上,可能有几种中介服务为您的电子邮件服务器解析DNS。
您举了“http://verify-email.org/”的示例。但是,你是否阅读过它在主页上的内容?
此电子邮件验证工具实际连接到邮件服务器和 检查邮箱是否存在。
这意味着它直接连接到您尝试发送邮件的域的MX服务器。即使你可以做到这一点。唯一不同的是,在现实生活中,我们的应用程序无法做到这一点。您连接到您的本地智能主机/中继。
此外,该服务的主页上说:
什么正在验证:格式: “[email protected]”;有效域名: “[email protected]”无效;有效的用户:验证用户;和 邮箱确实存在
这意味着,尝试连接到目标服务器之前,该服务不会对格式进行检查(可能是一个正则表达式),然后就检查DNS查找如果域名是有效或而不是,然后才尝试连接到目标服务器。
请记住,即使此服务也无法准确告诉您所有电子邮件服务的用户是否存在。例如,我已经在我的电子邮件服务器上使用了tarpitting,因此即使此服务也无法告诉您我是否存在。我的邮件服务器永远不会回应。 “verify-email.org”将始终返回ok
给你所有的东西。
BTW:“verify-email.org”将更多的往往不是这回你:
550 5.7.1 Service unavailable; Client host [verify-email.org] blocked using Spamhaus;
此服务已被屏蔽一些反垃圾邮件服务商!
希望有所帮助。
。
谢谢,现在我明白发生了什么。我想最好不要担心来自我的系统的失败收件人,并让邮件服务自己处理它。 – 2014-12-19 18:25:07