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