验证电子邮件域名是否存在。

12

有人在验证步骤中检查电子邮件地址的域名吗?例如,如果用户指定了blah@gmail.com作为其地址,则确认gmail.com是否存在。


我应该注意,在我的Web应用程序中,现有用户可以将邀请转发给他们的朋友。我根本不需要验证这些邀请。相反,我只想警告我的用户,如果出现错别字等情况可能会向错误的人发送邀请。这样做值得吗?

5个回答

16

需要验证用户电子邮件地址的网站通常会向该地址发送一封带有验证链接的电子邮件。仅检查电子邮件的域名并不能为你带来太多价值,因为人们通常会在现有的网络电子邮件提供商(通常是 @gmail.com、@yahoo.com 或 @hotmail.com)上提供虚假的电子邮件地址。

如果要仍然要验证域名,应该对该域名进行 MX 记录的 DNS 检查,而不仅仅是检查该域名是否已注册。

更新:请注意,电子邮件的域部分实际上可以是 IP 地址(即使这种形式被强烈反对)。在这种情况下,除非你实际上尝试通过 SMTP 连接到它,否则无法可靠地验证该地址是否有 SMTP 服务器。这基本上就像发送电子邮件一样。


9
您可以对mx记录进行DNS查询。以下是Code Project的一个示例:
http://www.codeproject.com/KB/IP/dnslookupdotnet.aspx

[附言]:

这回答了您的问题,但顺便说一句,我同意@Franci的看法,发送验证消息是更好的选择。如果有人已经做到了欺骗您的验证所需的其他所有步骤,那么检查域名并不能提供太多帮助。

2
您可以在控制台中执行此命令。
 nslookup -q=mx gmail.com

并解析输出结果以获取主机名中包含 MX 的行

gmail.com       MX preference = 40, mail exchanger = alt4.gmail-smtp-in.l.google.com
gmail.com       MX preference = 20, mail exchanger = alt2.gmail-smtp-in.l.google.com
gmail.com       MX preference = 5, mail exchanger = gmail-smtp-in.l.google.com
gmail.com       MX preference = 30, mail exchanger = alt3.gmail-smtp-in.l.google.com
gmail.com       MX preference = 10, mail exchanger = alt1.gmail-smtp-in.l.google.com

但我不建议首先使用这种检查方式。如果用户不想提供电子邮件地址,他总会找到一种方法来欺骗你。 唯一能做的就是发送带有验证链接的电子邮件。


在.NET语言中执行DNS查询时,无需解析nslookup。请参阅此答案以获取更好的方法:https://dev59.com/13A75IYBdhLWcg3w6Nhj#3040119 - Kevin Panko

1

通常我会让我使用的邮件组件来处理域名验证。如果它出现错误,你可以在代码中处理它,并决定是否向用户显示它。


1

确认域名是否是有效的邮件服务器是完全有可能的。不妨试试这些指示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接