电子邮件验证 MX 查找

Posted

技术标签:

【中文标题】电子邮件验证 MX 查找【英文标题】:Email validation MX Lookup 【发布时间】:2010-12-12 14:45:24 【问题描述】:

我被要求在 Web 应用程序上实现一些电子邮件地址验证 - 我相信我们都去过那里一千次......但是,这一次我被要求在域上进行 MX 查找看看它是否接受电子邮件。

有人知道这样做有什么潜在的问题吗? mx 查找是确定域是否接受电子邮件的可靠方法吗?是否存在有效电子邮件地址无法通过 MX 查找检查的极端情况?

感谢您的建议!

【问题讨论】:

【参考方案1】:

您只能检查是否有为该域注册的邮件服务器。

如果服务器也接受邮件并且地址是有效的(不是在语法上,但在某种意义上它存在一个收件箱等等......)你只会在发送例如时发现。注册邮箱

关于如何在 php 中执行此操作的示例

function mailserver_exists($email) 
 list($user,$domain) = split('@',$email);
 //included check for 'A' after [comment from bobince][1]
 return checkdnsrr($domain,'MX') || checkdnsrr($domain,'A');

if(domain_exists('joe@foreigndomain.xx')) ... else ...

是的,您也可以使用'TinyTim@192.184.165.13'checkdnsrr(host, type) 状态的 PHP 文档

host 可以是 IP 地址 点分四进制表示法或主机名

【讨论】:

您好 Jitter - 感谢您的回复。如果电子邮件地址使用 IP 地址,您是否知道 MX 查找是否有效:例如 TinyTim@192.184.165.13 扩展答案以回答您的其他问题【参考方案2】:

是否存在有效电子邮件地址可能无法通过 MX 查找检查的边缘情况?

是的,在没有 MX 记录的情况下,MTA 转而使用 A 记录。因此,仅允许 MX 记录会使在现实世界中工作的一类邮件服务器失败。

允许任何带有 MX 的名称​​或记录至少可以检测到导致 NXDOMAIN 的明显错误输入。然而,它仍然会允许错误输入最终出现在寮屋站点。由 A 记录解析的地址的进一步步骤可能是检查端口 25 在该地址上接受连接的位置。

【讨论】:

对于A记录,2525/587/465/2526等其他端口不也可以吗?干杯~ @lulalala:为了接受传入的公共电子邮件,该端口必须始终为 25。端口 587 和自定义替代项用于外发邮件提交。 这些天(2018 年),是“MX 还是 A 还是 AAAA”?我猜大多数 MTA 仍然不支持 IPv6,但可以肯定的是,我们应该包括 AAAA 检查,对吗?

以上是关于电子邮件验证 MX 查找的主要内容,如果未能解决你的问题,请参考以下文章

使用MX检查进行电子邮件验证

ruby Ping一个电子邮件地址以查看它是否存在。此脚本解析MX记录以查找负责向广告发送邮件的SMTP服务器

在DNS系统中的MX记录有啥作用

从 DNS 服务器中提取 MX 记录

邮件服务器一些A和MX类型恶意域名请求的解释

单独的网络和电子邮件主机