4

私は、Javaの大量メール送信アプリケーションを作成して、ユーザーに1日5万から10万のメールを送信します。

現在の計画は、(ローカルUNIXサーバー上の)sendmailに送信を委任することです。

私たちのテストによると、sendmailは1秒あたり最大5通のメールを送信しています。

JavaMailはより高速なオプションでしょうか?

誰かが電子メールを送信するためのより速い方法を知っていますか?このプロセスをできるだけ早く実行したいと考えています。

編集:ところで、PDFも添付されます

4

4 に答える 4

6

あなたはlikeとlikeを比較していません。JavaMailはSMTPと通信して、最寄りのメールサーバーにハンドオフします。Sendmailは、メールの宛先へのルーティングを担当するメール転送エージェントです。

一般的なセットアップは、JavaMailを使用してSMTP経由でSendmailサーバーに電子メールを中継するJavaアプリケーションです。この2つは競合他社ではなく、一緒に使用されます。sendmailサーバーは、Javaアプリケーションが生成するよりも速くjavamailからの配信を受け入れることができるはずですが、その後、独自の速度で非同期に配信します。

于 2009-11-22T21:53:45.323 に答える
4

これは少し古すぎるかもしれませんが、javamailとsendmailを連携させることができました。それは実際にはとても簡単で、私はそれをより速く終わらせないことに愚かでした...

ここでは、sendmailを少し無視しましょう。javamailを介して電子メールを送信するにはどうすればよいですか?オンラインにはたくさんのチュートリアルがありますが、その方法は次のとおりです。

  1. 適切なオーセンティケーターを使用してセッションを作成します。
  2. MimeMessageオブジェクトを作成します(ここにすべての受信者アドレスを追加します)。
  3. メッセージを使用してTransport.send()を呼び出します。

SMTPサーバーが最大100人の受信者(私のような)の電子メールのみを送信する場合はどうなりますか?そのとき、sendmailが登場します。sendmailは独自のSMTPサーバーと考えることができます。したがって、最初にインストールしてください。(私のように)Ubuntuを実行している場合は、次のようにしてください。

sudo apt-get install sendmail

インストールはすぐに終了します。その後、sendmailを使用できるようになります。わざわざ認証の種類などを設定することはしませんでしたが、サーバーがインターネット上にパブリックIPを持っている場合は、設定することをお勧めします。これで、Javaコード(javamailを使用)をSMTPサーバーにポイントする代わりに、ローカルホスト(またはsendmailをインストールしたばかりのマシン)にポイントするだけです。

通常のメールクライアント(thunderbird、Outlook、Windowsメール、またはボートに浮かぶもの)を使用してsendmailのインストールをテストすることもできます。sendmailをインストールしたマシンにSMTPサーバーを構成するだけです。何だと思う?できます!

全世界にメールを送信するためにこれを使用しないでください...;)

于 2010-04-23T00:25:03.557 に答える
1

まず第一に、これは正当な理由によるものであり、スパムではないと思いますか?

Sendmailは、電子メールの送信が非常に高速です。それほど速くないのは、ドメインのメールサーバーを見つけるために必要なDNSルックアップです(それぞれに対してMXクエリを実行する必要があります)。これは、報告する1秒あたり5つのメッセージにうまく適合します。

そうは言っても、javamailを使用してメッセージを作成し、それをすべての人に送信するようにメーリングリストソフトウェアに指示する、標準の高性能メーリングリストソフトウェアを使用するのがおそらく最善でしょう。また、実際にすべてを送信するために、たとえばGoogleMailと連携して拡張性を高めます。Google Apps for Javaを使用すると、Googleクラウド内から送信できます。

古代の歴史に戻って、私がその家令で働いていたとき、sendmailでうまくいきました。ezmlmはqmailでうまく機能し(しかしおそらく今では放棄されています)、mjmlmはpostfixでうまく機能すると思います。

于 2009-11-22T22:30:10.037 に答える
1

Tranport.send()-静的メソッドを使用する場合、Javaメーラーでメールを送信するために、このメソッドは、リストに存在する電子メールアドレスごとにハンドシェイクを実行します。(ハンドシェイクは、クライアントからの要求->サーバーからの応答->確認応答です。)つまり、SMTPメールサーバーとの接続を閉じるたびに。これがパフォーマンスを向上させる方法です。これにより、ハンドシェイクを1回だけ実行でき、SMTPトラフィックが大幅に削減されます。そして、すべての受信者に一度にメールを送信します。このシナリオでは、SMTPトラフィックについてSCR#Aを参照してください。参照用のコードは次のとおりです。

それ以外の、

Transport.send(msg);

以下のコードを使用する必要があります。

                            msg.saveChanges(); // implicit with Transport.send()
                            Transport tr = session.getTransport("smtp");
                            tr.connect(smtphost, username, password);
                            msg.saveChanges();   // don't forget this
                            tr.sendMessage(msg, msg.getAllRecipients());
                            tr.close();

バルクメールの送信用。

ここでは、wiresharkツールを使用してネットワークトラフィックを確認できます。

メールサーバーでこれを設定するために必要なもの。->WiresharkツールとApachetomcat6.0がインストールされたローカルm/cであり、メールサーバーにpingを送信できるはずです。relay.abcxyz.com

次に、両方のケースでテストベッドを実行します。

于 2011-07-19T14:12:26.780 に答える