Java:如何在不发送确认电子邮件的情况下验证电子邮件地址是否有效?

8
当用户在我的网站上注册时,我不想发送验证电子邮件,而只是想检查该电子邮件是否存在。有没有办法做到这一点?
使用Apache Tomcat和Java作为我的主要编程语言。
非常感谢!

1
你不能强迫任何电子邮件服务器确认有效邮箱存在并有人查看它。 - Colin Pickard
9个回答

17

不,没有办法确定电子邮件地址是否指向有效的目标。您可以检查基本语法以及该域在DNS中是否有记录,但仅此而已。


2
更具体地说:“...在DNS中有一个MX记录...” - Dolph
2
我不同意。您可以将电子邮件发送到没有MX记录的域名。 - bmargulies
5
主机可以在25号端口上完全运行SMTP服务器,而不需要任何MX记录。 MX记录的存在是为了告诉您应该将发送到某个DNS名称的邮件传递到其他域。如果foo.bar.baz.com有一个SMTP服务器,则不需要MX记录来接收邮件。 - bmargulies

8
你最多可以使用 正则表达式 来检查地址是否符合语法规则和/或查找 MX 记录 是否该域名有效,但这仍然不能保证电子邮件地址是合法的并属于相关注册人。没有比发送验证电子邮件并在短时间内等待确认更可靠的方法了。

1
@fuzzy:同时也没有一种100%可靠的方式证明这个电子邮件地址属于该用户,这永远不会发生。我检查了你回答中提到的那个网站,输入了几个我知道存在的地址,但其中一些由于服务器不支持VRFY而失败了。我不会浪费太多时间在网络上验证电子邮件地址。只需发送确认电子邮件并等待确认即可 :) - BalusC
你可以连接并发送RCPT消息,然后将其重置(RSET),你没有看到我的解决方案实际上是做什么的。 - user177800

6
与一些不熟悉的答案相反,您可以尝试连接到MX服务器并使用VRFY命令查看服务器是否支持它。这是一个网站的示例,它会为您执行此操作。如果您查看其与MX服务器的交换,它实际上确实尝试发送电子邮件,但在实际发送之前进行了RESET。使用我的电子邮件地址测试可以工作,但我没有收到电子邮件。所以,是的,您可以做到其他人说你不能做到的事情。使用您已知有效的域的地址,然后使用不支持的地址。最后一个RCTP TO命令将返回550错误。这就是您知道它不存在的方式。

6
我想说的是,尽管你不愿意这样做,请务必发送电子邮件并强制用户确认他们控制该邮件地址,然后才允许该邮件地址与您网站上的帐户相关联。为什么?因为不这样做,任何原因都会导致用户可以使用不属于他们的电子邮件地址注册帐户。他们可能会意外地这样做,也可能会故意这样做(例如,出于各种原因为其他人注册帐户);这是不合适的,允许这样做的网站将面临被报告给其ISP的风险。
(我说这话是作为一个Gmail帐户的所有者,每个月至少两到三次会在某个不强制用户以这种方式确认其电子邮件地址的网站上注册帐户。这很烦人,并且使我有责任从冒犯性网站上删除帐户。现在我已经开始恢复我能恢复的密码,登录帐户,然后将电子邮件地址更改为“UNKNOWN@gmail.com”之类的东西...这有点有趣,但我想您不希望发生在您的网站上。)

4
这里的重点并不是“强制人们确认电子邮件地址”,而是“不要向未经确认的地址发送电子邮件”。你可以在电子邮件得到确认之前创建账户,只要你不发送任何电子邮件(除了确认邮件),或防止其他用户尝试确认该地址。 - Colin Pickard

3

1

如果你只是想验证它看起来像一个有效的电子邮件地址,有许多示例正则表达式可以验证。如果你想验证用户控制了该电子邮件地址,你需要发送一些东西到它,并制定一个独特的响应来验证它。


1

看起来是一个很棒的服务,但我更喜欢免费的。谢谢。 - ufk

1

你可以使用 OpenID 服务来检查有效的电子邮件地址,就像 Stack Overflow 一样。

http://openid.net/


0

电子邮件验证服务在验证电子邮件地址方面非常有帮助。大多数服务提供商会执行6个级别的验证,包括语法验证、域名MX记录检查、基于角色的账户检测、一次性电子邮件地址(DEA)检测、蜜罐/垃圾邮件跟踪检测和深层SMTP验证。

大多数服务提供商都提供API集成,因此您可以直接从应用程序中验证电子邮件地址。


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