繁体   English   中英

GNU JavaMail:没有地址提供者:rfc822

[英]GNU JavaMail: No provider for address: rfc822

使用 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。 我将不得不接受它并使用 Oracle JavaMail API 吗?

我遇到了和你一样的问题,它碰巧是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>

至于确切原因,我没有花时间进一步调查。 这肯定是一个多线程安全错误(当多个线程同时使用 SMTP 时我得到了它)。

解决方案的原始参考here

看起来您的程序正在尝试将 rfc822 设置为用于传输层的域地址。 这是一个有效的地址吗? 我建议在您的代码中搜索此参考,因为问题无疑出在该区域附近。

暂无
暂无

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

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