A thing you should know if you are using multiple email accounts with `git send-email`

In some case, we need to send patches that made by other people instead. git send-email command can know this situation by itself by comparing the commit author information and mail sender’s information. In that case, git send-email automatically add From: line pointing the real author of the patch in the body of the mail so that maintainers applying the patches can set the author information correctly.

For example, if “Alice alice@abc.com” has made a commit and “Bob bob@abc.com” formats the commit into a patch file and sends it, git send-email automatically adds From: Alice <alice@abc.com> line in the body of the mail. And, when a maintainer is applying the patch using git am, the patch is applied with author “Alice alice@abc.com”.

However, please note that git send-email knows the situation by comparing the author information and the command caller’s git user eamil configuration or given ‘–from’ option only, not considering real smtp email account.

For example, suppose that Alice has two email accounts, alice@abc.com and alice@def.com. And, Alice wants to use alice@abc.com as her email address in the git history, but needs to send her patches using def.com SMTP server. She might use below commands.

$ git config sendemail.smtpserver smtp.def.com
$ git config sendemail.smtpuser alice@def.com
$ git config user.email "alice@abc.com"
$ git commit -as -m 'the patch'
$ git format-patch HEAD^
$ git send-email 0001_the_patch.patch

Because her git config is saying the user.email is alice@abc.com and the patch is authored by alice@abc.com, git send-email thinks same people is sending the patch. Thus, it doesn’t add the ‘From:’ line in the body of the mail. Of course, git send-email tries to set the from of the mail as alice@abc.com, but as the additionally specified ‘from’ information is usually (at least gmail does) ignored by the SMTP server, the maintainer will receive the mail saying author email as ‘alice@def.com’ only.

Note that git send-email considers the email address it tries to use as the from address, not the final one that SMTP server will use. Thus, this problem can be worked around in weird way using the --from option of the git send-email. In the above case, giving --from "Alice <alice@def.com>" option to git send-email makes the command to think the sender is not the author (alice@abc.com) and as a result, it adds the From: line in the body.

Also, please note that adding --from option does not always add the From: line in the body. Rather than that, it can even hide the From: line you intended to add, if you give the address that same with the commit’s author, regardless of what SMTP server you use. For example,

$ git config sendemail.smtpserver smtp.def.com
$ git config sendemail.smtpuser alice@def.com
$ git config user.email "alice@abc.com"
$ git commit -as -m 'the patch'
$ git format-patch HEAD^
$ git config user.email "alice@def.com"
$ git send-email --from alice@abc.com 0001_the_patch.patch

If the final command had no --from option, it would added the From: in-body line. However, because it specifies the real author address using --from option, git send-email thinks the real author is sending this mail and omits the From: line in the body.

Avatar
SeongJae Park (SJ)
Kernel Programmer

SeongJae Park (SJ) is a programmer who loves to analyze and develop systems.

Related