Javamail问题与邮件地址中的characters字符

Gui*_*lle 5 java jakarta-mail

在使用ñ字符时,我遇到了解析方法的问题:

essage.setRecipients(Message.RecipientType.TO, internetAddress.parse("somedir.withñchar@m ailserver.com",false));
Run Code Online (Sandbox Code Playgroud)

我为strict参数传递false,但总是得到错误:

javax.mail.internet.AddressException: Local address contains control or whitespace in string ``somedir.with±har@mailserver.com''
at Mailer.main(Mailer.java:386)
Caused by: javax.mail.internet.AddressException: Local address contains control
or whitespace in string ``somedir.with±har@mailserver.com''
        at javax.mail.internet.InternetAddress.checkAddress(InternetAddress.java
:1155)
        at javax.mail.internet.InternetAddress.parse(InternetAddress.java:1044)
        at javax.mail.internet.InternetAddress.parse(InternetAddress.java:575)
        at Mailer.main(Mailer.java:377)
Run Code Online (Sandbox Code Playgroud)

And*_*dré 5

如果您仍然遇到此问题,我建议您像我一样在您不寻常的电子邮件地址中添加双引号.它对我有用,因为InternetAddress的checkAddress方法放弃验证引用的地址.这是简单快捷的解决方案.

例:

unusual_email_without_at_sign_or_with_accentuátion (won't work)
"unusual_email_without_at_sign_or_with_accentuátion" (it works!)
Run Code Online (Sandbox Code Playgroud)

完美而正确的解决方案是Java团队修复InternetAddress类的错误,即使在构造函数中接收"strict = false",它也会检查电子邮件语法.

错误示例:

InternetAddress i = new InternetAddress("unusual_email_without_at_sign_or_with_accentuátion ", false)
Run Code Online (Sandbox Code Playgroud)

变通方案解决方案的示例:

InternetAddress i = new InternetAddress("\"unusual_email_without_at_sign_or_with_accentuátion\"", false)
Run Code Online (Sandbox Code Playgroud)

创建扩展Address的新类的方法将不起作用,因为Transport.send()由于某种原因似乎再次验证地址并且异常也被启动.

请告诉我们是否有帮助!


Mar*_*ens -1

创建一个新类,扩展它并覆盖验证函数。但是我不明白你为什么想要那个。

public class invalidInternetAddress extends internetAddress {

  @Override
  private static void checkAddress() throws AddressException {
  }
}
Run Code Online (Sandbox Code Playgroud)