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 を話しているときに発生しました)。

ソリューションの元のリファレンスはこちらです。

于 2014-08-20T15:37:54.477 に答える
0

あなたのプログラムは、トランスポート層に使用されるドメイン アドレスとして rfc822 を設定しようとしているようです。これは有効なアドレスですか? 問題は間違いなくその領域にあるため、コードでこのリファレンスを検索することをお勧めします。

于 2012-08-31T21:32:42.147 に答える