13

私は電子メールメッセージを送信するプログラムを書いていますが、受信者が私が送信した電子メールメッセージをいつ受信するかを知りたいです。JavaMail APIを使用してこれを行うにはどうすればよいですか?

SMTPMessageを使用する場合、通知オプションを設定した後、結果をどのように正確に処理しますか?

SMTPMessage smtpMsg = new SMTPMessage(msg);
smtpMsg.setNotifyOptions(SMTPMessage.NOTIFY_SUCCESS);
4

6 に答える 6

23

全面的に受け入れられ、尊重されている、これを行う標準的な方法はありません。ただし、いくつかのオプションがあることがわかります。

  • 値に電子メール アドレスを含むヘッダー "Return-Receipt-To" を追加します。電子メールの受信者がこのヘッダーを尊重するクライアントを持っている場合、電子メールが開かれたときに受信確認が送信されます。これは信頼できるものではありません。ユーザーは、レシートをサポートするクライアントを持っている場合でも、レシートを送信しないことをいつでも決定できるためです。

  • サーバーから読み込まれる電子メールに画像を追加し、ユーザーの電子メール アドレスを含む画像にパラメーターを配置します。電子メールが読み込まれると、サーバーから画像が読み込まれます。電子メール パラメータを収集し、空白のイメージを配信するスクリプトを記述します。ただし、多くのメール クライアントは、画像をダウンロードするかどうかをユーザーに確認するプロンプトを表示し、いつでもダウンロードしないことを選択できるため、これも信頼できません。また、一部の (ほとんどが古い) 電子メール クライアントは画像をサポートしていません。

  • おそらく最も信頼できる方法は、電子メールにメッセージをまったく含めないことです。メッセージを読むことができる Web サイトへのリンクのみを含め、リンクには電子メール アドレスまたは一意のコードを含めます。このようにして、誰がメッセージを読んだかを正確に知ることができます。もちろん、これには、人々が実際にメッセージを受信トレイに受け取らないという欠点があり、ウェブサイトにアクセスして読まないことを選択する可能性もあります.

最終的には、むらのある結果が得られて満足しない限り、この問題を解決するための創造的な解決策を考え出す必要があると思います.

于 2010-09-09T13:41:29.980 に答える
3

わかりました、これは古い議論ですが、

ここでシンプルで実用的なソリューションを見つけました(スペイン語のリンク)。

メッセージのヘッダーにもう 1 つのフィールドを追加するだけです。これを実現するには、クラスによって実装されるクラスのメソッドaddHeaderを使用する必要があります。このメソッドは、2 つのパラメーターヘッダーを受け取ります。PartMessagetypevalue

確認を得るには、次のヘッダーを追加する必要があります。

Disposition-Notification-To

そして、value確認の回答を送信したいメールは次のとおりです。

message.addHeader("Disposition-Notification-To","mail@example.com");

注意:最近では、gmail のような多くのメール サーバーがこの要求を破棄しているため、これは効果がないことに注意してください。

于 2016-01-20T12:54:25.520 に答える
1

電子メールが受信されたかどうかを調べる別の方法があります。それは、未配信の電子メールを取得することです。ここでかなり優れた Java 実装を見てきました。

彼らは javax.mail (メール処理用) と guava (文字列とコレクションの処理用) を使用しました。

于 2014-02-04T06:32:01.090 に答える
1

ここで私の回答を参照してください(この質問がRuby on Railsについて尋ねられたとき)。これは基本的に同じ答えです。

メール開封通知 - ruby​​ on rails

于 2010-09-09T13:26:37.717 に答える
0

SMTP メッセージを使用して配信ステータスを要求できます (プロバイダーがメールを受信したときなのか、ユーザーがメールを開いたときなのかはわかりません)。JavaMail はこれらの機能を直接サポートしていないため、RFC 3464 を読む必要があります。このスレッドには例もありますが、試していませんでした

websinaでもご覧いただけます

于 2010-09-09T14:13:01.943 に答える