【发布时间】:2015-12-26 17:28:57
【问题描述】:
在我们的应用程序中,我们使用 java mail 来发送电子邮件。一切都很好,直到有新的要求来发送电子邮件到一个 id 的形式 testUser@em_company.com(导致JavaMail抛出异常的部分是电子邮件地址在域名中包含_。(em_company.com)。
在我们的代码中,我将 InternetAddress 初始化为:
//harding coding toAddress for simplicity
String toAddress = "testUser@em_company.com";
InternetAddress address = new InternetAddress(toAddress);
查看代码后(Java Mail 1.4.4)
类:InternetAddress
方法:private static void checkAddress(String addr,
boolean routeAddr, boolean validate)
throws AddressException
我看到导致此异常的检查:
if (!(Character.isLetterOrDigit(c) || c == '-' || c == '.'))
throw new AddressException(
"Domain contains illegal character", addr);
所以问题是,有什么方法可以绕过这个检查 并要求java Mail不要对域名进行验证检查。
【问题讨论】:
-
也许Punycode 会解决你的问题。
-
能不能用非严格的构造函数:
InternetAddress address = new InternetAddress(toAddress, false);? -
non-strict 在内部不起作用,它首先调用 this(address)。
-
@FrédéricHenri 该链接更多地说明了用户名及其编码,但我主要关心的是域名是否包含下划线。
标签: java jakarta-mail