2009-11-23 8 views

答えて

20

以下のコードは、適切な方法で行い、正しい方法で行います。あなた自身がコメントで掲示何再読から

:の 先頭にリターンパス行を挿入すること RFC2821: 4.4 Trace Information

配信SMTPサーバがメッセージの 「最終配信」を作ります、メールデータ。これはreturn-pathの を使用する必要があります。メール システムはそれをサポートしなければならない。 リターンパス行には、 のMAILコマンドの情報が保存されます( )。ここで、最後の 配信は、メッセージがSMTP環境の を残したことを意味します。通常、この は、宛先ユーザ に配信されたことを意味します。または、 メールが削除されたことを意味します。

と数行後です。

メッセージ発信SMTPシステム は、既にはリターンパスヘッダを含むメッセージを送るべきではありません。

これを注意深く読んだ場合、最終的なsmtp-server/deliveryエージェントだけがReturn-Pathヘッダーを追加することになります。クライアント(メールを送信しようとする)がすべきことではありません。最終的なsmtp-serverは、Return-Pathヘッダーをエンベロープの送信者アドレス(SMTP MAIL FROM部分)に基づいています。

したがって、mail.smtp.fromを設定すると、エンベロープの送信者アドレスがfromの部分と異なる必要があることをjavaに伝える正しい方法です。

異なるfromのものが何であるかを理解することに問題がある場合は、telnet smtp-sessionを見てください。 [email protected]m.addFrom(...);

telnet smtp.example.com 25 
220 smtp.example.com ESMTP ..... 

helo computername 
250 smtp.example.com Hello computername [123.123.123.123] 

mail from:<[email protected]> 
250 <[email protected]> is syntactically correct 

rcpt to:<[email protected]> 
250 <[email protected]> verified 

data 
354 Enter message, ending with "." on a line by itself 
To: Joey <[email protected]> 
From: Joey <[email protected]> 
Subject: Joey 

Hey Joey! 

. 
250 OK id=.... 

Quit 

props.put("mail.smtp.from", "[email protected]"); 
Session session = Session.getDefaultInstance(props, null); 
MimeMessage m = new MimeMessage(session); 
m.addFrom(InternetAddress.parse("[email protected]")); 
+0

私はそれが解決策になると信じています。しかし、私が読んだことから、メールサーバーはそれをサポートしなければなりません。 "配信SMTPサーバーがメッセージの「最終配信」を行うと、メールデータの先頭に復帰パス行が挿入されます。パスラインはMAILコマンドのに情報を保存します。 " http://www.ietf.org/rfc/rfc2821.txt – Ricardo

+0

拡張回答を確認 – jitter

+0

私はこれをコードの他の多くのレベルで実行しようとしていますが、これは私のために働いた唯一の解決策です – kommradHomer

6

smtp.mail.from[email protected]に対応している必要があり、どこで同じ問題を経験し、「(唯一の解決策は、プロパティ「mail.smtp.from」props.putを入れて議論見つけましたmail.smtp.from "、" [email protected] ");

私はたくさんの電子メールを別のユーザーから送信しているため、このソリューションは適していないため、各電子メールのセッションを再作成することは、プロディクティビティにとって恐ろしいことになります。

だから私は、JavaMailのソースを読んだ後に、別の解決策が見つかりました:代わりのMimeMessageの

1)使用SMTPMessage(のMimeMessageを拡張します)。

2)setEnvelopeFrom(String)メソッドを使用します。

3)SMTPTransportを使用して電子メールを送信します(私は他人とは試しませんでした)。ここで

はコードの例です:

SMTPMessage message = new SMTPMessage(session); 
message.setEnvelopeFrom("[email protected]"); 
... 
transport.sendMessage(message, message.getAllRecipients()); 
+0

これは私は "mail.smtp.from"メソッドはしませんでした。ありがとう!楽しい。 – Nick

+0

私のために働いていませんでした – Anita

関連する問題