
Amazon SESでSPFのDMARC Alignmentチェックを通過するためのEnvelope From設定方法
Envelope FromでSPFのAlignmentを確実にする
2025年1月27日執筆
2025年2月5日更新
著者: 竹洞 陽一郎
Amazon SESでは、DKIM認証についてはCNAMEの設定を行うことで、独自ドメインによる署名が可能になり、DMARCのAlignmentチェックをパスできます。
一方、SPF認証では「カスタムMAILFROM」設定を利用しても、自動的にEnvelope Fromが自社ドメインで設定されるわけではありません。
そのため、SPFのDMARC Alignmentチェックをパスするためには、送信時に認証済みの自社ドメインをEnvelope Fromに明示的に設定する必要があります。
補足: EnvelopeFrom はSMTPのMAIL FROMコマンドで指定される送信者アドレスです。
一方、Return-Pathは配送途中のMTAが付与するヘッダーで、送信時に必ずしも明示的に設定されるものではありません。
実際、多くのケースではEnvelopeFromの値がReturn-Pathにコピーされるため、同一視されがちですが、厳密には異なる概念です。
以下に、Envelope Fromを明示的に設定するためのサンプルコードを示します。
各コード例は、シチュエーションに応じてご利用ください。
AWS SDK for Python (Boto3) を使用したメール送信例
この例では、Amazon SESのsend_emailメソッドを利用し、Envelope Fromを bounce@example.com
に設定しています。
import boto3 # SESクライアントの作成(リージョンは適宜変更してください) ses_client = boto3.client('ses', region_name='us-east-1') # メール送信リクエスト response = ses_client.send_email( Source='sender@example.com', Destination={ 'ToAddresses': ['recipient@example.com'] }, Message={ 'Subject': { 'Data': 'Test email' }, 'Body': { 'Text': { 'Data': 'This is a test email.' } } }, # Return Pathを明示的に設定 ReturnPath='bounce@example.com' ) print(response)
Python の smtplib を使用したメール送信例(SMTP経由)
この例では、smtplibライブラリを用いてSMTPサーバ経由でメールを送信し、メールヘッダーにReturn-Pathを追加しています。
import smtplib from email.mime.text import MIMEText from email.utils import formataddr # SMTPサーバ設定(Amazon SESのSMTPエンドポイント) SMTP_SERVER = "email-smtp.us-east-1.amazonaws.com" SMTP_PORT = 587 SMTP_USER = "your-smtp-username" SMTP_PASS = "your-smtp-password" # メールの基本情報 from_email = "sender@example.com" to_email = "recipient@example.com" subject = "Test email" body = "This is a test email." # MIMETextオブジェクトの作成 msg = MIMEText(body) msg['From'] = formataddr(('Sender Name', from_email)) msg['To'] = to_email msg['Subject'] = subject # Return-Pathヘッダーを追加(注意:SMTPのMAIL FROMとは別に、ヘッダー情報としても設定) msg.add_header('Return-Path', 'bounce@example.com') # SMTPサーバに接続してメール送信 with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server: server.starttls() # TLS接続を開始 server.login(SMTP_USER, SMTP_PASS) server.sendmail(from_email, to_email, msg.as_string())
これらの例を参考に、Return-Pathを正しく設定することで、SPFのDMARC Alignmentチェックをパスし、メールの信頼性を向上させることができます。