使用 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-partdomain 有效,它就是有效的电子邮件地址。

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有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)