gpt4 book ai didi

java - 域在字符串中包含非法字符 - Java Mail

转载 作者:行者123 更新时间:2023-11-30 03:15:03 25 4
gpt4 key购买 nike

在我们的应用程序中,我们使用 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)

类:互联网地址

方法:private static void checkAddress(String addr,
boolean 值routeAddr, boolean 值验证)
抛出AddressException

我看到一个导致此异常的检查:

  if (!(Character.isLetterOrDigit(c) || c == '-' || c == '.'))
throw new AddressException(
"Domain contains illegal character", addr);

所以问题是,有什么办法可以绕过这个检查并要求java Mail不要对域名进行验证检查。

最佳答案

这是一个有点奇怪的要求...域名通常只包含字母、数字、破折号或点字符(请参阅 here )。

无论如何,InternetAddress 类有一个辅助构造函数,它采用第二个 boolean 参数 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,这可能是正确的选择。

关于java - 域在字符串中包含非法字符 - Java Mail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32840496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com