- Configure git.
# ~/.config/git/config [sendemail] confirm = auto smtpServer = smtp.gmail.com smtpServerPort = 587 smtpEncryption = tls smtpUser = <gmail email address>
- Configure Authentication.
I believe the simplest setup is to create an application-specific password in Google dedicated to git.
Google Account -> Security -> Signing in to Google : App passwords
This password must be configured in git, but should be kept outside of your main gitconfig (which is likely versioned via a dotfile repo?). To do that, I use git's
# ~/.config/git/config [include] path = config.local # (relative or absolute path to the other config file)
# ~/.config/git/config.local [sendemail] smtpPass = <app-specific-password>
Alternatively, check out https://github.com/google/gmail-oauth2-tools/tree/master/go/sendgmail which supports authenticating to GMail with OAuth2.
- Determine your revlist.
To send a single commit, just use the sha. To send a range of commits, you can use
start_sha..end_sha. Most likely, you'll want to send the commits made to a branch that are missing in upstream. For that, you would use:
You can also use relative numbers to indicate the "previous X commits". e.g.
git send-email -3
- Send email:
git send-email <revlist> --to <email@example.com>
- If you receive an error like this:
Can't locate Net/SMTP/SSL.pm in @INC (@INC contains: ...
You may need to upgrade/install the Net::SMTP::SSL or IO::Socket::SSL packages:
sudo -H cpan Net::SMTP::SSL sudo -H cpan IO::Socket::SSL
- Advanced: configure multiple identites. You may configure multiple smtp servers and switch between them with identities.
[sendemail "gmail"] smtpUser = firstname.lastname@example.org smtpServer = smtp.gmail.com [sendemail "outlook"] smtpUser = email@example.com smtpServer = smtp.office365.com [sendemail] identity = outlook
For those who don't want to use their Gmail password for this or enable "less secure apps", I wrote a plug-in for git-send-email that uses OAuth 2 authorization. It requests only the minimum required permissions (send email on your behalf) and stores OAuth token data in Windows Credential Store, like Git Credential Manager does. Google has a plug-in which works in a similar fashion, but keeps credentials in a file, and uses less restricted tokens (all of Gmail vs just send email on your behalf). It works on Linux though.