1. ホーム
  2. java

[解決済み] javax.mail.NoSuchProviderException: smtps 用のプロバイダがない

2022-02-16 19:16:04

質問

Javaプロジェクトで電子メールを送信できるように設定しようとしていますが、"javax.mail.NoSuchProviderException.Setup.Settingsが発生します。以下の行を実行するたびに、smtps"のプロバイダがありません(これは、彼らの例からのコピー/ペーストです)。

Transport transport = session.getTransport("smtps");

いろいろ調べてみたところ、一般的にはmail.jarがクラスパスに含まれていないために投げられるようですが、私は実際にmail.jarが含まれています。 JDK 1.6を実行しているので、ここのFAQによるとactivation.jarを含める必要はないようです( http://www.oracle.com/technetwork/java/javamail/faq-135477.html#classpath ). さらに、activation.jarはjavamailのバージョン1.4.7では存在しないようです。

念のため、Oracleのサイトからzipを丸ごと再ダウンロードし、解凍してjarを新たに追加(古いjarを削除後)しましたが、やはり同じエラーが出ます。 この時点で何が問題なのか、何か考えはありますか?

EDIT: 出力される完全なスタックトレースはこちらです。

javax.mail.NoSuchProviderException: No provider for smtps
    at javax.mail.Session.getProvider(Session.java:433)
    at javax.mail.Session.getTransport(Session.java:627)
    at javax.mail.Session.getTransport(Session.java:608)
... my code that calls getTransport() ...
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
... more of my code ...
    at java.lang.Thread.run(Thread.java:662)

解決方法は?

つまり、私が参照していたプロジェクトに古いバージョンのmail.jarが含まれていたことが問題で、そのmail.jarのコピーを更新したら、問題が解決したことがわかりました。

今後の参考のために、このようなjarの衝突を記録したり、可視化する方法はないでしょうか?

https://confluence.atlassian.com/confkb/cannot-send-email-due-to-javax-mail-nosuchproviderexception-smtp-error-154079.html