1

使用 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?

4

2 回答 2

2

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

于 2014-08-20T15:37:54.477 回答
0

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

于 2012-08-31T21:32:42.147 回答