我想验证使用 SMTP 的电子邮件的邮箱是否存在。我可以做以下事情:
- 从域获取 MX 记录
- 通过 SMTP 连接到主机
然后我执行以下命令:
HELO somedomain.com
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
上述命令让我250
在本地机器上对无效电子邮件做出响应。但当我在某些在线服务上验证电子邮件时,我得到了554
响应(这是正确的)。这种奇怪的行为(本地机器上的无效结果)背后的原因是什么?
答案1
从技术上讲,如果邮箱不存在,您RCPT TO:
应该得到一个550
非 a 。如果命令失败(例如命令语法无效),则使用 A。但是,就像 Gryphius 所说的那样,如果使用的语法有效,许多邮件服务器将响应 250。它尚未检查实际邮箱是否存在,或者它只是不想告诉您地址是否存在。554
554
从技术上讲,该VRFY
命令是 SMTP 协议“应该”用来验证电子邮件地址是否存在的命令。但相当多的知名邮件服务实际上并不允许这样做VRFY
,或者只是说“不确定,但我会尝试发送”。
许多 SMTP“服务器”响应 250 OK 的原因是,它们通常只是其他邮件服务器的前端网关或序列中的“跳跃”。因此,它们会让链下的另一台服务器处理该地址是否有效。其他时候,邮件服务器不希望有人遍历各种电子邮件地址,希望得到无效与有效的列表。
答案2
您不能依赖 SMTP 进行收件人验证。许多邮件服务器仅检查收件人地址后邮件已被接受进入本地队列。如果收件人帐户不存在,他们会发回退回邮件。(“接受并退回”行为)。