GNU的JavaMail:无提供地址:RFC822(GNU JavaMail: No provide

2019-07-31 07:39发布

使用OpenJDK的1.7.0和GNU的JavaMail 1.1.2。

在实际的消息发送电话:

SMTPTransport.send(msg);

有时候是这样的:

javax.mail.NoSuchProviderException: No provider for address: rfc822
    at javax.mail.Session.getTransport(Session.java:641)
    at javax.mail.Transport.doSend(Transport.java:149)
    at javax.mail.Transport.send(Transport.java:75)

Transport.send(MSG)产生相同的结果。

我敢肯定我的类路径就可以了。 下面是它是如何在JAR任务的build.xml定义:

<zipfileset src="${sys}/inetlib.jar" includes="**/*.java **/*.class"/>
<zipfileset src="${sys}/gnumail-providers.jar" includes="**/*.java **/*.class"/>
<zipfileset src="${sys}/gnumail.jar" includes="**/*.java **/*.class"/>

其中$ {} SYS是/ usr / share / java目录。 上午我将不得不吮吸它,并使用甲骨文的JavaMail API?

Answer 1:

我得到了同样的问题,因为你和它发生在由罐子引起geronimo-javamail_1.4_spec搞乱事情了。 一个简单的解决方案是从你的依赖排除。 与Maven,假设它是从CXF的依赖关系:

<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-rt-core</artifactId>
  <version>2.7.5</version>
  <exclusions>
    <exclusion>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-javamail_1.4_spec</artifactId>
  </exclusion>
  </exclusions>
</dependency>

至于确切地知道为什么,我没有花时间来进一步调查。 这是肯定的多线程安全的bug(我把它当其中在同一时间说话SMTP多线程)。

该解决方案的原始参考这里 。



Answer 2:

它看起来像你的程序正试图设置RFC822为用于传输层的域名地址。 这是一个有效的地址? 我建议你搜索代码,此引用作为这一问题无疑周围区域。



文章来源: GNU JavaMail: No provider for address: rfc822