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:
- Return-Path header (if present and trusted)
- Sender header (if present)
- 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:``<alice@example.com>``
RCPT TO:``<bob@example.net>``
RCPT TO:``<charlie@example.org>``
RCPT TO:``<dave@example.edu>``
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:``<sender@example.com>``
RCPT TO:``<list-member-1@example.net>``
RCPT TO:``<list-member-2@example.org>``
...
Headers show:
To: mailinglist@example.com
Forwarding
When forwarding, original envelope may be different from headers:
Original: alice → bob
Forward: bob → charlie
MAIL FROM:``<alice@example.com>`` (original sender)
RCPT TO:``<charlie@example.edu>`` (new recipient)