【问题标题】:javax.mail.internet.InternetAddress RFC 822 validationjavax.mail.internet.InternetAddress RFC 822 验证
【发布时间】:2015-12-12 23:54:49
【问题描述】:

我会假设以下内容会抛出,但事实并非如此。

new javax.mail.internet.InternetAddress( "a@b......." ).validate

我的 javax.mail 版本是 1.4。 (如果重要,还有 java 版本 8)。这是根据 validate() 声称符合的 RFC822 的有效电子邮件地址吗? http://sphinx.mythic-beasts.com/~pdw/cgi-bin/emailvalidate 表示上述不是有效的 RFC822 电子邮件地址。

【问题讨论】:

  • java.net/projects/javamail/sources/mercurial/content/mail/src/… 第 1268 行看起来像是在测试这种可能性,如果找到它就会抛出异常。所以你是对的,它不应该是有效的。只是一个愚蠢的问题,如果你使用 validate() 而不是 validate 有关系吗?或者这可能是 Unicode 与 ASCII 的问题?
  • 我在 Scala 中使用它,因此写了 validate 没有 ()。虽然它是一样的。我认为您的意思是 1286 的线路,是的,看起来确实如此。虽然看代码,我对这个库的使用不再有信心,看起来写得很糟糕。

标签: java email-validation jakarta-mail email-address


【解决方案1】:

来自documentation:

当前的实现会检查许多(但不是全部)语法规则。

如果可以,请升级您的 JavaMail 版本。

public static void main(String[] args) throws Exception {
    Session.getInstance(new Properties()).setDebug(true);
    new javax.mail.internet.InternetAddress("a@b......." ).validate();
}

输出:

DEBUG: setDebug: JavaMail version 1.5.4
Exception in thread "main" javax.mail.internet.AddressException: Domain contains dot-dot in string ``a@b.......''
     at javax.mail.internet.InternetAddress.checkAddress(InternetAddress.java:1282)
     at javax.mail.internet.InternetAddress.parse(InternetAddress.java:1099)
     at javax.mail.internet.InternetAddress.parse(InternetAddress.java:638)
     at javax.mail.internet.InternetAddress.<init>(InternetAddress.java:111)

【讨论】:

    猜你喜欢
    • 2014-10-11
    • 2011-05-12
    • 2020-07-19
    • 2010-12-23
    • 2011-04-22
    • 2013-05-22
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    相关资源
    最近更新 更多