繁体   English   中英

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

[英]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)

类别: 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不要对域名进行验证检查。

有点奇怪的要求...域名通常只包含字母,数字,破折号或点字符(请参见此处 )。

无论如何,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,则可以采用这种方法。

您也可以尝试以下方法:

String addressString="ars.kov@gmail.com";
String personalString="??????? ?????????";
InternetAddress address=new InternetAddress(addressString,personalString,"UTF-8");

我遇到了同样的问题,我使用的是邮递员Post call:

我将参数设置为key =收件人值='abc@gmail.com'

从值中删除单引号后,它开始工作。 例如value=abc@gmail.com

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM