使用 InternetAddress.validate() 检查电子邮件地址
Posted
技术标签:
【中文标题】使用 InternetAddress.validate() 检查电子邮件地址【英文标题】:Checking email addresses with InternetAddress.validate() 【发布时间】:2019-12-29 17:22:38 【问题描述】:为什么下面的代码认为“hurt123@aol-com”是可以的?
public boolean validateEmail(String email)
boolean isValid = false;
try
// Create InternetAddress object and validated the supplied
// address which is this case is an email address.
InternetAddress internetAddress = new InternetAddress(email, true); // strict
internetAddress.validate();
isValid = true;
catch (AddressException e)
System.out.println("Bad eMail address: " + email);
return isValid;
【问题讨论】:
根据 RFC 822 它是有效的,这就是validate()
正在检查的内容。
从未见过这样的域名。它翻译成什么?我的意思是,真的有这个名称的网站吗?猜猜这显示了时代的变化。
有趣的是,上述地址在 Session 中被 javax.mail.Authenticator() 拒绝。去图吧!
【参考方案1】:
isValid = true
因为hurt123@aol-com
是有效的电子邮件地址。
尽管 ICANN “极力反对无点电子邮件地址”,但它仍然是有效的电子邮件地址。 电子邮件地址的格式为 local-part@domain,其中本地部分最长可达 64 个八位字节,而域最多可以有 255 个八位字节 (REF)
只要local-part
和domain
有效,它就是有效的电子邮件地址。
domain 可以是 IP 地址文字,用方括号 []
括起来,例如 jsmith@[192.168.2.1]
或 jsmith@[IPv6:2001:db8::1]
例如:user1@localhost
是一个有效的电子邮件地址。
【讨论】:
谢谢,比尔。不幸的是,这使得 InternetAddress.validate() 几乎毫无用处,因为 99.999% 的实际电子邮件地址末尾确实有“.whatever”,并且 100% 偶尔会出现拼写错误:-)以上是关于使用 InternetAddress.validate() 检查电子邮件地址的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)