Skip to content

Instantly share code, notes, and snippets.

@peterwillcn
Forked from jasonkarns/readme.md
Created February 8, 2021 08:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save peterwillcn/723396327c947dafafaab266e62a2acd to your computer and use it in GitHub Desktop.
Save peterwillcn/723396327c947dafafaab266e62a2acd to your computer and use it in GitHub Desktop.
Git send-email using Gmail
  1. Configure git.
# ~/.config/git/config
[sendemail]
  confirm = auto
  smtpServer = smtp.gmail.com
  smtpServerPort = 587
  smtpEncryption = tls
  smtpUser = <gmail email address>
  1. 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 [include] directive.

# ~/.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.

  1. 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: upstream/branch_name..branch_name You can also use relative numbers to indicate the "previous X commits". e.g. git send-email -3

  1. Send email:
git send-email <revlist> --to <other@user.com>
  1. 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
  1. Advanced: configure multiple identites. You may configure multiple smtp servers and switch between them with identities.
[sendemail "gmail"]
  smtpUser = jason@gmail.com
  smtpServer = smtp.gmail.com

[sendemail "outlook"]
  smtpUser = jason@outlook.com
  smtpServer = smtp.office365.com
  
[sendemail]
  identity = outlook
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment