私は、Javaの大量メール送信アプリケーションを作成して、ユーザーに1日5万から10万のメールを送信します。
現在の計画は、(ローカルUNIXサーバー上の)sendmailに送信を委任することです。
私たちのテストによると、sendmailは1秒あたり最大5通のメールを送信しています。
JavaMailはより高速なオプションでしょうか?
誰かが電子メールを送信するためのより速い方法を知っていますか?このプロセスをできるだけ早く実行したいと考えています。
編集:ところで、PDFも添付されます
私は、Javaの大量メール送信アプリケーションを作成して、ユーザーに1日5万から10万のメールを送信します。
現在の計画は、(ローカルUNIXサーバー上の)sendmailに送信を委任することです。
私たちのテストによると、sendmailは1秒あたり最大5通のメールを送信しています。
JavaMailはより高速なオプションでしょうか?
誰かが電子メールを送信するためのより速い方法を知っていますか?このプロセスをできるだけ早く実行したいと考えています。
編集:ところで、PDFも添付されます
あなたはlikeとlikeを比較していません。JavaMailはSMTPと通信して、最寄りのメールサーバーにハンドオフします。Sendmailは、メールの宛先へのルーティングを担当するメール転送エージェントです。
一般的なセットアップは、JavaMailを使用してSMTP経由でSendmailサーバーに電子メールを中継するJavaアプリケーションです。この2つは競合他社ではなく、一緒に使用されます。sendmailサーバーは、Javaアプリケーションが生成するよりも速くjavamailからの配信を受け入れることができるはずですが、その後、独自の速度で非同期に配信します。
これは少し古すぎるかもしれませんが、javamailとsendmailを連携させることができました。それは実際にはとても簡単で、私はそれをより速く終わらせないことに愚かでした...
ここでは、sendmailを少し無視しましょう。javamailを介して電子メールを送信するにはどうすればよいですか?オンラインにはたくさんのチュートリアルがありますが、その方法は次のとおりです。
SMTPサーバーが最大100人の受信者(私のような)の電子メールのみを送信する場合はどうなりますか?そのとき、sendmailが登場します。sendmailは独自のSMTPサーバーと考えることができます。したがって、最初にインストールしてください。(私のように)Ubuntuを実行している場合は、次のようにしてください。
sudo apt-get install sendmail
インストールはすぐに終了します。その後、sendmailを使用できるようになります。わざわざ認証の種類などを設定することはしませんでしたが、サーバーがインターネット上にパブリックIPを持っている場合は、設定することをお勧めします。これで、Javaコード(javamailを使用)をSMTPサーバーにポイントする代わりに、ローカルホスト(またはsendmailをインストールしたばかりのマシン)にポイントするだけです。
通常のメールクライアント(thunderbird、Outlook、Windowsメール、またはボートに浮かぶもの)を使用してsendmailのインストールをテストすることもできます。sendmailをインストールしたマシンにSMTPサーバーを構成するだけです。何だと思う?できます!
全世界にメールを送信するためにこれを使用しないでください...;)
まず第一に、これは正当な理由によるものであり、スパムではないと思いますか?
Sendmailは、電子メールの送信が非常に高速です。それほど速くないのは、ドメインのメールサーバーを見つけるために必要なDNSルックアップです(それぞれに対してMXクエリを実行する必要があります)。これは、報告する1秒あたり5つのメッセージにうまく適合します。
そうは言っても、javamailを使用してメッセージを作成し、それをすべての人に送信するようにメーリングリストソフトウェアに指示する、標準の高性能メーリングリストソフトウェアを使用するのがおそらく最善でしょう。また、実際にすべてを送信するために、たとえばGoogleMailと連携して拡張性を高めます。Google Apps for Javaを使用すると、Googleクラウド内から送信できます。
古代の歴史に戻って、私がその家令で働いていたとき、sendmailでうまくいきました。ezmlmはqmailでうまく機能し(しかしおそらく今では放棄されています)、mjmlmはpostfixでうまく機能すると思います。
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
次に、両方のケースでテストベッドを実行します。