在我们的应用程序中,我们使用java邮件发送电子邮件。一切都运行良好,直到一个新的要求来发送一个电子邮件到一个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不要对域名进行验证检查。
答案 0 :(得分:2)
这有点奇怪的要求......域名通常只包含字母,数字,短划线或点字符(请参阅here)。
无论如何,InternetAddress类有二级构造函数,它接受第二个布尔参数strict,它强制执行RFC822语法。但它始终使用检查调用第一个构造函数,因此它无法按预期工作。
InternetAddress address = new InternetAddress("testUser@em_company.com", false);
// from API sources:
public InternetAddress(String address, boolean strict) throws AddressException {
this(address); // THIS CAUSES EXCEPTION ANYWAY
if (strict) {
if (isGroup())
getGroup(true); // throw away the result
else
checkAddress(this.address, true, true);
}
}
因此,代码调查之后我想到的唯一解决方案就是这个,但你必须尝试一下:
InternetAddress address = new InternetAddress();
address.setAddress("testUser@em_company.com");
不幸的是,使用此代码会丢失InternetAddress的所有解析逻辑。但是,如果您只想使用此类来符合Java Mail API,那么这可能是最佳选择。
答案 1 :(得分:0)
您也可以尝试: -
String addressString="ars.kov@gmail.com";
String personalString="??????? ?????????";
InternetAddress address=new InternetAddress(addressString,personalString,"UTF-8");
答案 2 :(得分:0)
我遇到了同样的问题,我正在使用postman Post电话:
我将参数设置为key = recipient value ='abc@gmail.com'
从值中删除单引号后,它开始工作。 例如value=abc@gmail.com