1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

メールヘッダ読み方

Last updated at Posted at 2026-01-01

Authentication-Resultsフィールド】

A. SPF (Sender Policy Framework)

メール送信元のIPアドレスが、送信ドメインの公開ポリシー(SPFレコード)で許可されているかを検証します。

項目名 説明
spf SPF認証の結果passfailsoftfailneutralnonetemperrorpermerror などがあります。 spf=pass
smtp.mailfrom SPFの検証対象となるエンベロープFromアドレスMAIL FROM:コマンドで指定されるアドレス)のドメイン。 smtp.mailfrom=sender.com

B. DKIM (DomainKeys Identified Mail)

メールに付加された電子署名を検証し、送信中に内容が改ざんされていないか、正規のサーバーから送られたものかを検証します。

項目名 説明
dkim DKIM認証の結果passfailnonetemperrorpermerror などがあります。 dkim=pass
header.d 署名に利用されたDKIMドメイン。署名を作成した組織のドメインを示します。 header.d=signedby.com
header.s セレクタ(DKIM-Signatureのs=) header.s=selector1
header.b 署名値の先頭部分 header.i=@example.com
header.i DKIM署名の識別子。通常はエンベロープFromアドレスまたはFromヘッダーアドレスと整合性があることを示します。 header.i=@signedby.com

C. DMARC (Domain-based Message Authentication, Reporting, and Conformance)

SPFとDKIMの結果を基に、Fromヘッダーのアドレスのドメインとのアライメント(整合性)を確認し、メールの処理ポリシー(隔離、拒否など)を指示します。

項目名 説明
dmarc DMARC認証の結果passfailnonetemperrorpermerror などがあります。 dmarc=pass
header.from Fromヘッダーアドレスのドメイン。DMARCの検証対象となるドメインです。 header.from=example.org
policy 受信サーバーが適用したDMARCポリシー。 p=quarantine

【Receivedフィールド】

Received行は、メールが送信元から受信者まで経由したすべてのメールサーバーの記録を示す重要なヘッダ情報です。メールが配送される過程で、各メールサーバーがこの行を追加していきます。

1. 追加の仕組み

  • メールが通過するメールサーバー(MTA: Mail Transfer Agent)ごとに、先頭に新しいReceived行が追加されます
  • 最も上にあるReceived行が最後に経由したサーバー(受信者に最も近いサーバー)
  • 最も下にあるReceived行が最初に経由したサーバー(送信者に最も近いサーバー)

2. 記載される情報

典型的なReceived行には以下の情報が含まれます:

Received: from mail.example.com (mail.example.com [192.0.2.1])
    by mx.recipient.com (Postfix) with ESMTP id ABC123
    for <user@recipient.com>; Mon, 1 Feb 2026 10:30:45 +0000 (UTC)
  • from: 送信元のホスト名/IPアドレス
  • by: 受信したサーバーのホスト名
  • with: 使用された通信プロトコル(SMTP, ESMTP, HTTPなど)
  • id: メッセージID(サーバー内での識別子)
  • for: 宛先メールアドレス
  • 日時: そのサーバーでメールを受信した日時

【Return-Pathフィールド】

Return-Pathは、メールの配送に失敗した場合に、エラー通知(バウンスメール)を送り返すべき宛先を示すヘッダフィールドです。別名「エンベロープFrom」や「バウンスアドレス」とも呼ばれます。

基本的な特徴

1. 自動生成の仕組み

Return-Pathは送信者が直接設定できません。以下のプロセスで生成されます:

① SMTPセッション開始
   送信MTA → 受信MTA: MAIL FROM:<sender@example.com>
   
② メール本体送信
   ヘッダ(From, To, Subject等)と本文を転送
   
③ 最終配送時
   受信MTAがメールボックスに配送する際に
   「MAIL FROM」の値を使ってReturn-Pathを追加

SMTPセッションの詳細

2. 追加されるタイミング

重要: Return-Pathは最終配送サーバー(メールボックスに配送するサーバー)でのみ追加されます。

3. 形式

Return-Path: <sender@example.com>
  • 必ず山括弧< >で囲まれたメールアドレス形式
  • 空の場合は <> と表記されます

中継サーバーがある場合の動作

📨 配送経路の例

送信者MTA → 中継1 → 中継2 → 受信者MTA → メールボックス
              ↓       ↓        ↓           ↓
           Received Received Received  Return-Path追加
           追加のみ  追加のみ  追加のみ   + Received追加

各段階での処理

送信者のMTA

  • SMTPで MAIL FROM: <sender@example.com> を送信
  • この情報をエンベロープ情報として次のサーバーへ

中継サーバー1, 2, ...

  • ✅ Receivedヘッダを追加
  • ❌ Return-Pathは追加しない
  • ✅ エンベロープ情報(MAIL FROM)はそのまま次へ転送

受信者のMTA(最終配送サーバー)

  • ✅ Receivedヘッダを追加
  • Return-Pathを追加(エンベロープ情報を使用)
  • ✅ メールボックスに配送完了

実際のヘッダ例

Return-Path: <sender@example.com>
Delivered-To: user@recipient.com
Received: from mx.recipient.com (mx.recipient.com [203.0.113.5])
    by mailbox.recipient.com (Postfix) with ESMTP id XYZ789
    for <user@recipient.com>; Mon, 1 Feb 2026 10:35:00 +0000
Received: from relay2.net (relay2.net [198.51.100.20])
    by mx.recipient.com (Postfix) with ESMTP id ABC456
    Mon, 1 Feb 2026 10:34:50 +0000
Received: from relay1.net (relay1.net [198.51.100.10])
    by relay2.net (Postfix) with ESMTP id DEF123
    Mon, 1 Feb 2026 10:34:40 +0000
Received: from mail.sender.com (mail.sender.com [192.0.2.1])
    by relay1.net (Postfix) with ESMTP id GHI890
    Mon, 1 Feb 2026 10:34:30 +0000
From: User Name <sender@example.com>
To: recipient@recipient.com
Subject: Test Mail
Date: Mon, 1 Feb 2026 19:34:25 +0900

ポイント:

  • Return-Path: 1つだけ(最上部、最終配送サーバーが追加)
  • Received: 4つ(各サーバーが追加)
  • Return-Pathのアドレスは最初の「MAIL FROM」が維持される

FromヘッダとReturn-Pathの違い

これは非常に重要な概念です:

項目 Return-Path Fromヘッダ
レイヤー SMTPプロトコル層(エンベロープ) メッセージ層(ヘッダ)
用途 配送エラー通知の送信先 メール本文上の送信者表示
設定者 受信側MTAが自動追加 送信者が自由に設定可能
偽装難易度 困難(SMTPレベルで記録) 容易(単なるテキスト)
表示 メーラーでは通常非表示 メーラーで送信者として表示
認証対象 SPFで検証される DMARCで検証される

📧 具体例: メルマガ配信

Return-Path: <bounce+12345@newsletter-system.com>
From: カスタマーサポート <support@company.com>
Reply-To: support@company.com
  • From: 受信者に見せたい送信者名(企業の公式アドレス)
  • Return-Path: バウンス処理用の専用アドレス(配信システムが管理)
  • Reply-To: 返信先アドレス

この設定により:

主な用途

🔄 1. バウンス処理

配送失敗時の通知先として機能します:

配送失敗の流れ:
送信者MTA → 受信者MTA (配送失敗)
              ↓
         バウンスメール生成
              ↓
         Return-Pathのアドレスへ送信
              ↓
         送信者が配送失敗を認識

バウンスメールの特徴:

Return-Path: <>  ← 空(バウンスのバウンスを防ぐ)
From: Mail Delivery System <mailer-daemon@recipient.com>
To: sender@example.com  ← 元のReturn-Pathの値
Subject: Undelivered Mail Returned to Sender

🛡️ 2. SPF認証

SPFとは

特殊なケースと例外

🔄 1. メーリングリスト

メーリングリストサーバーは新しいメールとして再送信します:

元のメール:
Return-Path: <original-sender@example.com>
From: original-sender@example.com
To: mailinglist@lists.example.org

↓ メーリングリストサーバー処理

配信されるメール:
Return-Path: <mailinglist-bounces+token@lists.example.org>
From: original-sender@example.com
Reply-To: mailinglist@lists.example.org

なぜ書き換えるのか?

  • メーリングリスト経由の配送失敗を管理者が把握するため
  • 元の送信者に大量のバウンスが届くのを防ぐため

🔄 2. メール転送(Forward)

転送の種類によって動作が異なります:

パターンA: エンベロープ維持型

user@company.com → user@gmail.com (転送設定)

結果:
Return-Path: <original-sender@example.com>
  • 元の送信者が維持される
  • バウンスは元の送信者に届く
  • ⚠️ SPF認証が失敗する可能性あり

パターンB: SRS(Sender Rewriting Scheme)使用

user@company.com → user@gmail.com (転送設定)

結果:
Return-Path: <SRS0=HHH=TT=company.com=original-sender@company.com>
  • SPF問題を回避するため書き換え
  • バウンスは転送元サーバー経由で元の送信者に届く

📭 3. 空のReturn-Path

Return-Path: <>

使用される場面:

  • バウンスメール自体
  • システム通知メール
  • 返信不要の自動送信メール

目的: バウンスのバウンス(二重バウンス)を防ぐ

もしバウンスメールに通常のReturn-Pathがあると:

元のメール配送失敗 → バウンス送信 → バウンスも配送失敗
→ バウンスのバウンス送信 → 無限ループ ❌

空のReturn-Pathにすることで、このメール自体がバウンスしても通知されません。

🏢 4. 大規模メール配信システム

VERP(Variable Envelope Return Path)という手法:

Return-Path: <bounce-user1-campaign123@sender.com>
Return-Path: <bounce-user2-campaign123@sender.com>
Return-Path: <bounce-user3-campaign123@sender.com>

利点:

  • 各受信者ごとに固有のReturn-Path
  • バウンスメールを解析しなくても、アドレスだけで誰への配送が失敗したか判別可能
  • 自動処理が容易

実務での活用ポイント

🔧 メールサーバー管理者として

1. 設定確認

# Postfixの場合
# MAIL FROMのデフォルト設定
/etc/postfix/main.cf:
  myhostname = mail.example.com
  myorigin = $mydomain

2. バウンス処理の設定

# バウンス通知の設定
/etc/postfix/main.cf:
  notify_classes = bounce, delay, policy, protocol, resource, software
  bounce_notice_recipient = postmaster@example.com

3. ログでの追跡

# Postfixログでエンベロープ情報を確認
tail -f /var/log/maillog | grep "MAIL FROM"

# 出力例:
Feb  1 10:34:30 mail postfix/smtp[12345]: MAIL FROM:<sender@example.com>
Feb  1 10:34:31 mail postfix/smtp[12345]: RCPT TO:<user@recipient.com>
Feb  1 10:34:32 mail postfix/smtp[12345]: 250 2.1.0 Ok
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?