Search code examples
emailsmtppostfix-mtamailing-listdkim

Correct email headers for delivering mailing list mail


I'm writing an application that allows users to send email to dynamically-created mailing lists. For example, a user can send an email to my-team@site.com (the site is a league management site for sports leagues) and the email will be sent to everyone on that users's team. I'm trying to figure out what the email headers should be to deliver the email correctly and make all the From and To fields look right.

In Gmail, when you get an email from a mailing list (I'm looking at an email from google groups), it says that it came from the person who sent it and that it was sent to the list address, yet the email was delivered to me. My address doesn't appear in any of headers except in the Delivered-To: header. Is that some Google magic, or can I do the same thing?

Bonus question: I'm using Postfix+OpenDKIM to sign the emails. It will sign the message if the From domain matches the one I specified, but not if the Sender domain matches. How can I tell it to use the Sender domain instead.


Solution

  • From: and To: headers are for 'display purposes' (this is what is presented in the users email application as sender and recipient). They don't have to match to the real sender/recipient of a email message which are called "envelope sender"/"envelope recipient" and are specified in the smtp protocol ("MAIL FROM:...." "RCPT TO...").

    Example:

    Mail comes from alice@example.com, goes to list@example.org and is being delivered to bob@example.net:

    From Alice to The list Server:

    Envelope Sender: alice@example.com
    Envelope Recipient: list@example.org
    From Header: alice@example.com
    To Header: list@example.org

    From the list Server to bob:

    Envelope Sender: list-bounces@example.org (so error messages go to the list server, not to alice!)
    Envelope Recipient: bob@example.net
    From Header: alice@example.com (Bob sees Alice as the sender, this is not modified by the list server)
    To Header: list@example.org (again, not modified by the list server)

    Optional: Reply-To header: list@example.org (So, if bob presses reply, the reply goes to the list - added by the list server ) - beware: some people do not like reply-to header munging

    Additional headers:

    Some email clients also understand these additional headers and present special mailinglist features to the user:

    • list-Id
    • list-Post
    • list-help
    • list-unsubscribe
    • list-owner

    https://www.ietf.org/rfc/rfc2919.txt https://www.ietf.org/rfc/rfc2369.txt

    Also, you could add a header

    Precedence: bulk
    

    which for example tells intelligent out-of-office implementations not to send out-of-office replies to the list. But this is discouraged by RFC 2076.