Pythonでメールを送信 - 「From」アドレスとは異なるReturn -Pathを設定する方法
-
09-10-2019 - |
質問
私がやろうとしているのは、Lamson(LamsonProject.org)でSmail Mail Serverをセットアップすることです。それは非常にうまく機能していますが、私はリターンパスの設定に問題があり、そのため、バウンスは「住所から」になるため、メールサーバーに到達しません。
LamsonはPythons SMTPLIBを使用してメールを送信します。
私のプロジェクトと私のSMTPサーバーの間の「トーク」はそのようになります:
send: 'ehlo xxx.mydomiain.com\r\n'
reply: '250-smtp.smtpserver.com\r\n'
reply: '250-PIPELINING\r\n'
reply: '250-SIZE 20000000\r\n'
reply: '250-VRFY\r\n'
reply: '250-ETRN\r\n'
reply: '250-STARTTLS\r\n'
reply: '250-XVERP\r\n'
reply: '250 8BITMIME\r\n'
reply: retcode (250); Msg: smtp.smtpserver.com
PIPELINING
SIZE 20000000
VRFY
ETRN
STARTTLS
XVERP
8BITMIME
send: u'mail FROM:<me@myotherdomain.com> size=352\r\n'
reply: '250 Ok\r\n'
reply: retcode (250); Msg: Ok
send: u'rcpt TO:<pleasebouncethis@myotherdomain.com>\r\n'
reply: '250 Ok\r\n'
reply: retcode (250); Msg: Ok
send: 'data\r\n'
reply: '354 End data with <CR><LF>.<CR><LF>\r\n'
reply: retcode (354); Msg: End data with <CR><LF>.<CR><LF>
data: (354, 'End data with <CR><LF>.<CR><LF>')
send: 'MIME-Version: 1.0\r\nTo: pleasebouncethis@myotherdomain.com\r\nSubject: Testing bounces\r\nSender: MAILER-DAEMON@mydomiain.com\r\nReturn-Path: MAILER-DAEMON@mydomain.com\r\nReply-To: MAILER-DAEMON@mydomain.com\r\nMessage-Id: 377b8dcdf661810d3dc73a4a01fe23b3\r\nFrom: me@myotherdomain.com\r\nContent-Type: text/plain; charset="utf-8"\r\nContent-Transfer-Encoding: base64\r\n\r\nc2RmZ2TDpGfDpGRsZsOkZ2xkZmc=\r\n.\r\n'
reply: '250 Ok: queued as E635D157D3\r\n'
reply: retcode (250); Msg: Ok: queued as E635D157D3
data: (250, 'Ok: queued as E635D157D3')
send: 'quit\r\n'
reply: '221 Bye\r\n'
reply: retcode (221); Msg: Bye
Done
ですから、リターンパスは確かにヘッダーにあることがわかります。
答えを探している間、私はこれを見つけました:mimeメッセージのpython sendmailでリターンパスを設定します
答えの最後のコメントは、エラー/バウンス/などです。 fromのアドレスではなく、エンベロープ送信者に移動する必要があります。
エンベロープ送信者と指定方法を調べたとき、私はこのwikiの記事に出会いました:http://en.wikipedia.org/wiki/bounce_address
これには、リターンパス、リバースパス、エンベロープ、エンベロープ送信者、メール、2821-from、returnアドレス、from_、errors-to。
私はそれらすべてをメールのヘッダーと--voilaに入れました - それはうまくいきました。
私の質問は今です - 私は本当にメールヘッダーのリターンパスのための非常に多くの可能なオプションを常にリストする必要がありますか?現在、これらのパラメーターの1つまたは2つを受け入れるようにメールサーバーが構成されていますか?跳ね返ったときに、メールが私のメールサーバーに返されることを確認するためのより良い方法はありますか?
アラン。
解決
あなたがいる場合 送信 メールでは、これらのヘッダーを設定する必要はありません。エンベロープ送信者の正しい場所は MAIL FROM:
コマンド、だからあなたの場合:
MAIL FROM:<MAILER-DAEMON@mydomain.com>
このコマンドはメッセージ自体ではなくSMTPプロトコルの一部であるため、 受信者 メールサーバーは、元のSMTPエンベロープが利用できないフィルターまたはその他のダウンストリーム処理の利益のためにリターンパスヘッダーを追加します。見る RFC2821:
配信SMTPサーバーがメッセージの「最終配信」を作成すると、メールデータの開始時にリターンパスラインを挿入します。このリターンパスの使用が必要です。メールシステムはそれをサポートする必要があります。 Return-Pathラインは、の情報を保存しますu003Creverse-path>メールコマンドから。
他のヒント
from_addr
で使用します sendmail(from_addr, to_addrs, msg, mail_options=[], rcpt_options=[])
機能は、 Return-Path
.
msg
関数とともに送信して、別のものを含めることができます From:
アドレスから通常のヘッダーは、人々が電子メールを開くと見るとわかります。
これをで見ることができます SMTPLIBドキュメント。そこでメモを引用してください:
from_addrおよびto_addrsパラメーターは、輸送エージェントが使用するメッセージエンベロープを構築するために使用されます。 SendMailは、メッセージヘッダーを決して変更しません。