有办法检测电子邮件ID是否格式正确。示例abcqs@def.com
是一个格式正确的电子邮件地址,但这可能是也可能不是有效的电子邮件帐户。
def.com
)。如果无效,那么如果我们发送邮件,我们会收到一些发送失败的邮件,可能是在发送邮件后的几个小时内。
我想实现一个类似的概念。我想验证电子邮件ID是否属于有效帐户,以确定该帐户是否存在。
如何实现它?
答案 0 :(得分:4)
不幸的是,在实际发送消息之前,您无法知道它是否有效,因为它是决定地址是否有效的远程服务器。所有本地计算机都知道如何将消息路由到适当的域进行处理。
如果您愿意,可以查看域名是否已解析,但您仍然不知道确切的电子邮件地址是否存在。
答案 1 :(得分:4)
我认为更好的方法是发送电子邮件并验证用户是否激活了该帐户。
他们已经验证了他们。
您可以每隔x
天检查一次数据库,并删除所有旧条目,例如超过一周前未经过验证的条目。
答案 2 :(得分:3)
正如尼克发布的那样,在您发送之前,您无法确切知道。但是,您可以通过编程方式检查给定域名的MX记录:http://stefanp.eu/blog/2009/09/dns-lookup-mx-records-java/。这解决了你的案例-1
答案 3 :(得分:2)
在SO上讨论了many, many times验证电子邮件。简而言之,没有办法知道电子邮件地址/收件箱是否确实存在。某些服务器可能会有助于将发送到不存在的收件箱的电子邮件退回,但很多/大多数服务器都不会。
此外,正则表达式验证电子邮件格式也是一个失败的原因。在最大化覆盖范围和最小化误报之间进行权衡。当然,还有真正的地址不符合各种RFC。所以我的建议是做一个简单的健全性检查:检查是否存在“@”字符。
如果要验证注册,请在电子邮件中包含一个包含用户ID和一些随机身份验证代码的链接。用户单击此以验证其帐户。如果他被给出了虚假地址,他将不会收到该电子邮件,并且他的帐户将不会被验证。
答案 4 :(得分:1)
如果您想要查找电子邮件地址,请创建一个唯一的号码,并将其存储在数据库中,并将其存储在电子邮件地址中。然后发送电子邮件到该地址,并返回您网站的链接。链接应具有唯一编号作为参数。电子邮件应该说像;
点击此处验证您的电子邮件地址。
一旦您的网站收到带有指定唯一编号的链接,您就知道该电子邮件地址是真实的。
答案 5 :(得分:0)
(投票给其他几个答案 - 同意用户电子邮件验证可能是最好的 - 但也希望提供这个简单的DNS验证版本,Henri描述。他发布的链接需要另一个库,但你至少可以做到没有它的基本检查。)
这是基本的域名检查:
public boolean isValidDomain(String domainName)
{
try
{
InetAddress.getByName(domainName);
return true;
}
catch (UnknownHostException e)
{
return false;
}
}
这是基本的DNS MX记录检查:
public boolean isValidEmailDomain(String domainName)
{
try
{
DirContext ictx = new InitialDirContext();
Attributes attrs = ictx.getAttributes("dns://" + dnsServer + "/" + domainName,
new String[] { "MX" });
Attribute attr = attrs.get("MX");
return (attr != null);
}
catch (NamingException e)
{
return false;
}
}
dnsServer
does not have to be used in some environments, but will have to be in others的位置。你可能需要在那里试验。
(引用的所有类都在java.net
或javax.naming
。)