MailData

Envelope Fromのためのアライメント

Amazon SESでSPFのDMARC Alignmentチェックを通過するためのEnvelope From設定方法

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チェックをパスし、メールの信頼性を向上させることができます。