Skip to main content

Appendix B. Generating SMTP Commands from RFC 822 Header Fields

This appendix provides guidance on generating SMTP envelope commands (MAIL FROM and RCPT TO) from RFC 5322 (formerly RFC 822) message header fields.

Envelope vs. Header Addresses

SMTP Envelope: The addresses used in MAIL FROM and RCPT TO commands Message Headers: The addresses appearing in From:, To:, Cc:, Bcc: fields

Important: Envelope and header addresses may differ!

Generating MAIL FROM

The reverse-path (MAIL FROM) should typically be derived from:

  1. Return-Path header (if present and trusted)
  2. Sender header (if present)
  3. From header (fallback)

For bounce messages, use null reverse-path: MAIL FROM:<>

Generating RCPT TO

Recipients should be collected from:

  • To: header
  • Cc: header
  • Bcc: header (then remove from message)
  • Resent-To:, Resent-Cc:, Resent-Bcc: (for resent messages)

Example

Message Headers:

From: alice@example.com
To: bob@example.net
Cc: charlie@example.org
Bcc: dave@example.edu
Subject: Meeting tomorrow

SMTP Commands:

MAIL FROM:``&lt;alice@example.com&gt;``
RCPT TO:``&lt;bob@example.net&gt;``
RCPT TO:``&lt;charlie@example.org&gt;``
RCPT TO:``&lt;dave@example.edu&gt;``

Transmitted Message Headers (BCC removed):

From: alice@example.com
To: bob@example.net
Cc: charlie@example.org
Subject: Meeting tomorrow

Special Cases

Distribution Lists

When sending to a mailing list, the RCPT TO may differ from visible To:/Cc: headers:

MAIL FROM:``&lt;sender@example.com&gt;``
RCPT TO:``&lt;list-member-1@example.net&gt;``
RCPT TO:``&lt;list-member-2@example.org&gt;``
...

Headers show:
To: mailinglist@example.com

Forwarding

When forwarding, original envelope may be different from headers:

Original: alice → bob
Forward: bob → charlie

MAIL FROM:``&lt;alice@example.com&gt;`` (original sender)
RCPT TO:``&lt;charlie@example.edu&gt;`` (new recipient)