【问题标题】:Checking email addresses with InternetAddress.validate()使用 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() 拒绝。去图吧!

标签: java email-validation


【解决方案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% 偶尔会出现拼写错误:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
  • 2011-04-16
  • 2010-10-22
  • 1970-01-01
  • 2016-04-06
  • 2013-03-11
  • 2012-04-08
相关资源
最近更新 更多