域在字符串中包含非法字符 - Java 邮件
Domain contains illegal character in string - Java Mail
在我们的应用程序中,我们使用 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)
Class : 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 邮件不要对域名进行验证检查。
有点奇怪的要求...域名通常只包含字母、数字、破折号或点字符(参见 here)。
无论如何,InternetAddress class 有第二个构造函数,它采用第二个布尔参数 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 的所有解析逻辑。但是如果你只想使用这个 class 来符合 Java 邮件 API,这可能是要走的路。
你也可以试试这个:-
String addressString="ars.kov@gmail.com";
String personalString="??????? ?????????";
InternetAddress address=new InternetAddress(addressString,personalString,"UTF-8");
我有同样的问题,我正在使用邮递员 Post 调用:
我设置参数为key=recipient value='abc@gmail.com'
它在从值中删除单引号后开始工作。
例如值=abc@gmail.com
在我们的应用程序中,我们使用 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)
Class : 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 邮件不要对域名进行验证检查。
有点奇怪的要求...域名通常只包含字母、数字、破折号或点字符(参见 here)。
无论如何,InternetAddress class 有第二个构造函数,它采用第二个布尔参数 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 的所有解析逻辑。但是如果你只想使用这个 class 来符合 Java 邮件 API,这可能是要走的路。
你也可以试试这个:-
String addressString="ars.kov@gmail.com";
String personalString="??????? ?????????";
InternetAddress address=new InternetAddress(addressString,personalString,"UTF-8");
我有同样的问题,我正在使用邮递员 Post 调用:
我设置参数为key=recipient value='abc@gmail.com'
它在从值中删除单引号后开始工作。 例如值=abc@gmail.com