私のアプリケーションは随時メールを送信する必要があります。私はjavamailのgetDefaultSessionとgetTransportを使ってメッセージを送信していますが、期待通りに動作しています。javamailセッションのトランスポートを開いたままにしても構いませんか?
しかし、私は送信に長い時間がかかることに気付きました - 送信ごとに最大7秒。私はこのように、手順を打破する場合:
Transport transport = session.getTransport("smtp");
transport.connect();
transport.sendMessage(msg, addresses)
transport.close();
...私はそれはほとんどすべての時間のかかり、Connect()の呼び出し、毎回だと見ることができます。
私が見つけたすべての例では、トランスポート、接続、送信、切断を行っています。しかしもちろん、それらはすべてシングルショットの例であり、1回の呼び出しで大量の電子メールを送信します。
私はこのように、私はちょうどオープン接続を残すことができることを考えていた:
Transport transport = session.getTransport("smtp");
if (!transport.isConnected())
transport.connect();
transport.sendMessage(msg, addresses)
を(ここでは、その上のバリエーションがあります:java mail keeping Transport object connected)。
私は最終的に何らかのシャットダウンフックでそれを閉じなければなりません。そして、私はフォールバックを持たなければならないかもしれません(接続が失われているが、輸送が実現しない場合)。しかし、アプリケーションライフタイムの間にこれを開いたままにしておかない理由は何ですか?
おかげで、 アラステア
こんにちはTomas、ありがとう、私が望んでいたもの。私は実際にはSingleton 'EmailSender'インスタンス内でそれを使用する予定ですので、これはうまくいくはずです。 – Alastair
このアプローチは、私の答え – Yura