GNU JavaMail:没有地址rfc822的提供程序

GNU JavaMail:没有地址rfc822的提供程序,java,ant,jakarta-mail,Java,Ant,Jakarta Mail,使用OpenJDK1.7.0和GNUJavaMail 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(Transpor

使用OpenJDK1.7.0和GNUJavaMail 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?

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

我遇到了与您相同的问题,它碰巧是由jar
geronimo-javamail\u 1.4\u规范
造成的。一个简单的解决方案是将其从依赖项中排除。对于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>

org.apache.cxf