git-send-email(1)
=================

NAME
----
git-send-email - Send a collection of patches as emails


SYNOPSIS
--------
[verse]
'git send-email' [<options>] (<file>|<directory>)...
'git send-email' [<options>] <format-patch-options>
'git send-email' --dump-aliases
'git send-email' --translate-aliases


DESCRIPTION
-----------
Takes the patches given on the command line and emails them out.
Patches can be specified as files, directories (which will send all
files in the directory), or directly as a revision list.  In the
last case, any format accepted by linkgit:git-format-patch[1] can
be passed to git send-email, as well as options understood by
linkgit:git-format-patch[1].

The header of the email is configurable via command-line options.  If not
specified on the command line, the user will be prompted with a ReadLine
enabled interface to provide the necessary information.

There are two formats accepted for patch files:

1. mbox format files
+
This is what linkgit:git-format-patch[1] generates.  Most headers and MIME
formatting are ignored.

2. The original format used by Greg Kroah-Hartman's 'send_lots_of_email.pl'
   script
+
This format expects the first line of the file to contain the "Cc:" value
and the "Subject:" of the message as the second line.


OPTIONS
-------

Composing
~~~~~~~~~

--annotate::
	Review and edit each patch you're about to send. Default is the value
	of `sendemail.annotate`. See the CONFIGURATION section for
	`sendemail.multiEdit`.

--bcc=<address>,...::
	Specify a "Bcc:" value for each email. Default is the value of
	`sendemail.bcc`.
+
This option may be specified multiple times.

--cc=<address>,...::
	Specify a starting "Cc:" value for each email.
	Default is the value of `sendemail.cc`.
+
This option may be specified multiple times.

--compose::
	Invoke a text editor (see GIT_EDITOR in linkgit:git-var[1])
	to edit an introductory message for the patch series.
+
When `--compose` is used, git send-email will use the From, To, Cc, Bcc,
Subject, Reply-To, and In-Reply-To headers specified in the message. If
the body of the message (what you type after the headers and a blank
line) only contains blank (or Git: prefixed) lines, the summary won't be
sent, but the headers mentioned above will be used unless they are
removed.
+
Missing From or In-Reply-To headers will be prompted for.
+
See the CONFIGURATION section for `sendemail.multiEdit`.

--from=<address>::
	Specify the sender of the emails.  If not specified on the command line,
	the value of the `sendemail.from` configuration option is used.  If
	neither the command-line option nor `sendemail.from` are set, then the
	user will be prompted for the value.  The default for the prompt will be
	the value of GIT_AUTHOR_IDENT, or GIT_COMMITTER_IDENT if that is not
	set, as returned by "git var -l".

--reply-to=<address>::
	Specify the address where replies from recipients should go to.
	Use this if replies to messages should go to another address than what
	is specified with the --from parameter.

--in-reply-to=<identifier>::
	Make the first mail (or all the mails with `--no-thread`) appear as a
	reply to the given Message-ID, which avoids breaking threads to
	provide a new patch series.
	The second and subsequent emails will be sent as replies according to
	the `--[no-]chain-reply-to` setting.
+
So for example when `--thread` and `--no-chain-reply-to` are specified, the
second and subsequent patches will be replies to the first one like in the
illustration below where `[PATCH v2 0/3]` is in reply to `[PATCH 0/2]`:
+
  [PATCH 0/2] Here is what I did...
    [PATCH 1/2] Clean up and tests
    [PATCH 2/2] Implementation
    [PATCH v2 0/3] Here is a reroll
      [PATCH v2 1/3] Clean up
      [PATCH v2 2/3] New tests
      [PATCH v2 3/3] Implementation
+
Only necessary if --compose is also set.  If --compose
is not set, this will be prompted for.

--subject=<string>::
	Specify the initial subject of the email thread.
	Only necessary if --compose is also set.  If --compose
	is not set, this will be prompted for.

--to=<address>,...::
	Specify the primary recipient of the emails generated. Generally, this
	will be the upstream maintainer of the project involved. Default is the
	value of the `sendemail.to` configuration value; if that is unspecified,
	and --to-cmd is not specified, this will be prompted for.
+
This option may be specified multiple times.

--8bit-encoding=<encoding>::
	When encountering a non-ASCII message or subject that does not
	declare its encoding, add headers/quoting to indicate it is
	encoded in <encoding>.  Default is the value of the
	'sendemail.assume8bitEncoding'; if that is unspecified, this
	will be prompted for if any non-ASCII files are encountered.
+
Note that no attempts whatsoever are made to validate the encoding.

--compose-encoding=<encoding>::
	Specify encoding of compose message. Default is the value of the
	'sendemail.composeEncoding'; if that is unspecified, UTF-8 is assumed.

--transfer-encoding=(7bit|8bit|quoted-printable|base64|auto)::
	Specify the transfer encoding to be used to send the message over SMTP.
	7bit will fail upon encountering a non-ASCII message.  quoted-printable
	can be useful when the repository contains files that contain carriage
	returns, but makes the raw patch email file (as saved from a MUA) much
	harder to inspect manually.  base64 is even more fool proof, but also
	even more opaque.  auto will use 8bit when possible, and quoted-printable
	otherwise.
+
Default is the value of the `sendemail.transferEncoding` configuration
value; if that is unspecified, default to `auto`.

--xmailer::
--no-xmailer::
	Add (or prevent adding) the "X-Mailer:" header.  By default,
	the header is added, but it can be turned off by setting the
	`sendemail.xmailer` configuration variable to `false`.

Sending
~~~~~~~

--envelope-sender=<address>::
	Specify the envelope sender used to send the emails.
	This is useful if your default address is not the address that is
	subscribed to a list. In order to use the 'From' address, set the
	value to "auto". If you use the sendmail binary, you must have
	suitable privileges for the -f parameter.  Default is the value of the
	`sendemail.envelopeSender` configuration variable; if that is
	unspecified, choosing the envelope sender is left to your MTA.

--sendmail-cmd=<command>::
	Specify a command to run to send the email. The command should
	be sendmail-like; specifically, it must support the `-i` option.
	The command will be executed in the shell if necessary.  Default
	is the value of `sendemail.sendmailCmd`.  If unspecified, and if
	--smtp-server is also unspecified, git-send-email will search
	for `sendmail` in `/usr/sbin`, `/usr/lib` and $PATH.

--smtp-encryption=<encryption>::
	Specify in what way encrypting begins for the SMTP connection.
	Valid values are 'ssl' and 'tls'. Any other value reverts to plain
	(unencrypted) SMTP, which defaults to port 25.
	Despite the names, both values will use the same newer version of TLS,
	but for historic reasons have these names. 'ssl' refers to "implicit"
	encryption (sometimes called SMTPS), that uses port 465 by default.
	'tls' refers to "explicit" encryption (often known as STARTTLS),
	that uses port 25 by default. Other ports might be used by the SMTP
	server, which are not the default. Commonly found alternative port for
	'tls' and unencrypted is 587. You need to check your provider's
	documentation or your server configuration to make sure
	for your own case. Default is the value of `sendemail.smtpEncryption`.

--smtp-domain=<FQDN>::
	Specifies the Fully Qualified Domain Name (FQDN) used in the
	HELO/EHLO command to the SMTP server.  Some servers require the
	FQDN to match your IP address.  If not set, git send-email attempts
	to determine your FQDN automatically.  Default is the value of
	`sendemail.smtpDomain`.

--smtp-auth=<mechanisms>::
	Whitespace-separated list of allowed SMTP-AUTH mechanisms. This setting
	forces using only the listed mechanisms. Example:
+
------
$ git send-email --smtp-auth="PLAIN LOGIN GSSAPI" ...
------
+
If at least one of the specified mechanisms matches the ones advertised by the
SMTP server and if it is supported by the utilized SASL library, the mechanism
is used for authentication. If neither 'sendemail.smtpAuth' nor `--smtp-auth`
is specified, all mechanisms supported by the SASL library can be used. The
special value 'none' maybe specified to completely disable authentication
independently of `--smtp-user`

--smtp-pass[=<password>]::
	Password for SMTP-AUTH. The argument is optional: If no
	argument is specified, then the empty string is used as
	the password. Default is the value of `sendemail.smtpPass`,
	however `--smtp-pass` always overrides this value.
+
Furthermore, passwords need not be specified in configuration files
or on the command line. If a username has been specified (with
`--smtp-user` or a `sendemail.smtpUser`), but no password has been
specified (with `--smtp-pass` or `sendemail.smtpPass`), then
a password is obtained using 'git-credential'.

--no-smtp-auth::
	Disable SMTP authentication. Short hand for `--smtp-auth=none`

--smtp-server=<host>::
	If set, specifies the outgoing SMTP server to use (e.g.
	`smtp.example.com` or a raw IP address).  If unspecified, and if
	`--sendmail-cmd` is also unspecified, the default is to search
	for `sendmail` in `/usr/sbin`, `/usr/lib` and $PATH if such a
	program is available, falling back to `localhost` otherwise.
+
For backward compatibility, this option can also specify a full pathname
of a sendmail-like program instead; the program must support the `-i`
option.  This method does not support passing arguments or using plain
command names.  For those use cases, consider using `--sendmail-cmd`
instead.

--smtp-server-port=<port>::
	Specifies a port different from the default port (SMTP
	servers typically listen to smtp port 25, but may also listen to
	submission port 587, or the common SSL smtp port 465);
	symbolic port names (e.g. "submission" instead of 587)
	are also accepted. The port can also be set with the
	`sendemail.smtpServerPort` configuration variable.

--smtp-server-option=<option>::
	If set, specifies the outgoing SMTP server option to use.
	Default value can be specified by the `sendemail.smtpServerOption`
	configuration option.
+
The --smtp-server-option option must be repeated for each option you want
to pass to the server. Likewise, different lines in the configuration files
must be used for each option.

--smtp-ssl::
	Legacy alias for '--smtp-encryption ssl'.

--smtp-ssl-cert-path::
	Path to a store of trusted CA certificates for SMTP SSL/TLS
	certificate validation (either a directory that has been processed
	by 'c_rehash', or a single file containing one or more PEM format
	certificates concatenated together: see verify(1) -CAfile and
	-CApath for more information on these). Set it to an empty string
	to disable certificate verification. Defaults to the value of the
	`sendemail.smtpSSLCertPath` configuration variable, if set, or the
	backing SSL library's compiled-in default otherwise (which should
	be the best choice on most platforms).

--smtp-user=<user>::
	Username for SMTP-AUTH. Default is the value of `sendemail.smtpUser`;
	if a username is not specified (with `--smtp-user` or `sendemail.smtpUser`),
	then authentication is not attempted.

--smtp-debug=(0|1)::
	Enable (1) or disable (0) debug output. If enabled, SMTP
	commands and replies will be printed. Useful to debug TLS
	connection and authentication problems.

--batch-size=<num>::
	Some email servers (e.g. smtp.163.com) limit the number emails to be
	sent per session (connection) and this will lead to a failure when
	sending many messages.  With this option, send-email will disconnect after
	sending $<num> messages and wait for a few seconds (see --relogin-delay)
	and reconnect, to work around such a limit.  You may want to
	use some form of credential helper to avoid having to retype
	your password every time this happens.  Defaults to the
	`sendemail.smtpBatchSize` configuration variable.

--relogin-delay=<int>::
	Waiting $<int> seconds before reconnecting to SMTP server. Used together
	with --batch-size option.  Defaults to the `sendemail.smtpReloginDelay`
	configuration variable.

Automating
~~~~~~~~~~

--no-to::
--no-cc::
--no-bcc::
	Clears any list of "To:", "Cc:", "Bcc:" addresses previously
	set via config.

--no-identity::
	Clears the previously read value of `sendemail.identity` set
	via config, if any.

--to-cmd=<command>::
	Specify a command to execute once per patch file which
	should generate patch file specific "To:" entries.
	Output of this command must be single email address per line.
	Default is the value of 'sendemail.toCmd' configuration value.

--cc-cmd=<command>::
	Specify a command to execute once per patch file which
	should generate patch file specific "Cc:" entries.
	Output of this command must be single email address per line.
	Default is the value of `sendemail.ccCmd` configuration value.

--header-cmd=<command>::
	Specify a command that is executed once per outgoing message
	and output RFC 2822 style header lines to be inserted into
	them. When the `sendemail.headerCmd` configuration variable is
	set, its value is always used. When --header-cmd is provided
	at the command line, its value takes precedence over the
	`sendemail.headerCmd` configuration variable.

--no-header-cmd::
	Disable any header command in use.

--[no-]chain-reply-to::
	If this is set, each email will be sent as a reply to the previous
	email sent.  If disabled with "--no-chain-reply-to", all emails after
	the first will be sent as replies to the first email sent.  When using
	this, it is recommended that the first file given be an overview of the
	entire patch series. Disabled by default, but the `sendemail.chainReplyTo`
	configuration variable can be used to enable it.

--identity=<identity>::
	A configuration identity. When given, causes values in the
	'sendemail.<identity>' subsection to take precedence over
	values in the 'sendemail' section. The default identity is
	the value of `sendemail.identity`.

--[no-]signed-off-by-cc::
	If this is set, add emails found in the `Signed-off-by` trailer or Cc: lines to the
	cc list. Default is the value of `sendemail.signedOffByCc` configuration
	value; if that is unspecified, default to --signed-off-by-cc.

--[no-]cc-cover::
	If this is set, emails found in Cc: headers in the first patch of
	the series (typically the cover letter) are added to the cc list
	for each email set. Default is the value of 'sendemail.ccCover'
	configuration value; if that is unspecified, default to --no-cc-cover.

--[no-]to-cover::
	If this is set, emails found in To: headers in the first patch of
	the series (typically the cover letter) are added to the to list
	for each email set. Default is the value of 'sendemail.toCover'
	configuration value; if that is unspecified, default to --no-to-cover.

--suppress-cc=<category>::
	Specify an additional category of recipients to suppress the
	auto-cc of:
+
--
- 'author' will avoid including the patch author.
- 'self' will avoid including the sender.
- 'cc' will avoid including anyone mentioned in Cc lines in the patch header
  except for self (use 'self' for that).
- 'bodycc' will avoid including anyone mentioned in Cc lines in the
  patch body (commit message) except for self (use 'self' for that).
- 'sob' will avoid including anyone mentioned in the Signed-off-by trailers except
  for self (use 'self' for that).
- 'misc-by' will avoid including anyone mentioned in Acked-by,
  Reviewed-by, Tested-by and other "-by" lines in the patch body,
  except Signed-off-by (use 'sob' for that).
- 'cccmd' will avoid running the --cc-cmd.
- 'body' is equivalent to 'sob' + 'bodycc' + 'misc-by'.
- 'all' will suppress all auto cc values.
--
+
Default is the value of `sendemail.suppressCc` configuration value; if
that is unspecified, default to 'self' if --suppress-from is
specified, as well as 'body' if --no-signed-off-cc is specified.

--[no-]suppress-from::
	If this is set, do not add the From: address to the cc: list.
	Default is the value of `sendemail.suppressFrom` configuration
	value; if that is unspecified, default to --no-suppress-from.

--[no-]thread::
	If this is set, the In-Reply-To and References headers will be
	added to each email sent.  Whether each mail refers to the
	previous email (`deep` threading per 'git format-patch'
	wording) or to the first email (`shallow` threading) is
	governed by "--[no-]chain-reply-to".
+
If disabled with "--no-thread", those headers will not be added
(unless specified with --in-reply-to).  Default is the value of the
`sendemail.thread` configuration value; if that is unspecified,
default to --thread.
+
It is up to the user to ensure that no In-Reply-To header already
exists when 'git send-email' is asked to add it (especially note that
'git format-patch' can be configured to do the threading itself).
Failure to do so may not produce the expected result in the
recipient's MUA.

--[no-]mailmap::
	Use the mailmap file (see linkgit:gitmailmap[5]) to map all
	addresses to their canonical real name and email address. Additional
	mailmap data specific to git-send-email may be provided using the
	`sendemail.mailmap.file` or `sendemail.mailmap.blob` configuration
	values. Defaults to `sendemail.mailmap`.

Administering
~~~~~~~~~~~~~

--confirm=<mode>::
	Confirm just before sending:
+
--
- 'always' will always confirm before sending
- 'never' will never confirm before sending
- 'cc' will confirm before sending when send-email has automatically
  added addresses from the patch to the Cc list
- 'compose' will confirm before sending the first message when using --compose.
- 'auto' is equivalent to 'cc' + 'compose'
--
+
Default is the value of `sendemail.confirm` configuration value; if that
is unspecified, default to 'auto' unless any of the suppress options
have been specified, in which case default to 'compose'.

--dry-run::
	Do everything except actually send the emails.

--[no-]format-patch::
	When an argument may be understood either as a reference or as a file name,
	choose to understand it as a format-patch argument (`--format-patch`)
	or as a file name (`--no-format-patch`). By default, when such a conflict
	occurs, git send-email will fail.

--quiet::
	Make git-send-email less verbose.  One line per email should be
	all that is output.

--[no-]validate::
	Perform sanity checks on patches.
	Currently, validation means the following:
+
--
		*	Invoke the sendemail-validate hook if present (see linkgit:githooks[5]).
		*	Warn of patches that contain lines longer than
			998 characters unless a suitable transfer encoding
			('auto', 'base64', or 'quoted-printable') is used;
			this is due to SMTP limits as described by
			https://www.ietf.org/rfc/rfc5322.txt.
--
+
Default is the value of `sendemail.validate`; if this is not set,
default to `--validate`.

--force::
	Send emails even if safety checks would prevent it.


Information
~~~~~~~~~~~

--dump-aliases::
	Instead of the normal operation, dump the shorthand alias names from
	the configured alias file(s), one per line in alphabetical order. Note
	that this only includes the alias name and not its expanded email addresses.
	See 'sendemail.aliasesFile' for more information about aliases.

--translate-aliases::
	Instead of the normal operation, read from standard input and
	interpret each line as an email alias. Translate it according to the
	configured alias file(s). Output each translated name and email
	address to standard output, one per line. See 'sendemail.aliasFile'
	for more information about aliases.

CONFIGURATION
-------------

include::includes/cmd-config-section-all.adoc[]

include::config/sendemail.adoc[]

EXAMPLES
--------
Use gmail as the smtp server
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To use 'git send-email' to send your patches through the GMail SMTP server,
edit ~/.gitconfig to specify your account settings:

----
[sendemail]
	smtpEncryption = tls
	smtpServer = smtp.gmail.com
	smtpUser = yourname@gmail.com
	smtpServerPort = 587
----

If you have multi-factor authentication set up on your Gmail account, you can
generate an app-specific password for use with 'git send-email'. Visit
https://security.google.com/settings/security/apppasswords to create it.

Once your commits are ready to be sent to the mailing list, run the
following commands:

	$ git format-patch --cover-letter -M origin/master -o outgoing/
	$ edit outgoing/0000-*
	$ git send-email outgoing/*

The first time you run it, you will be prompted for your credentials.  Enter the
app-specific or your regular password as appropriate.  If you have credential
helper configured (see linkgit:git-credential[1]), the password will be saved in
the credential store so you won't have to type it the next time.

Note: the following core Perl modules that may be installed with your
distribution of Perl are required:
MIME::Base64, MIME::QuotedPrint, Net::Domain and Net::SMTP.
These additional Perl modules are also required:
Authen::SASL and Mail::Address.


SEE ALSO
--------
linkgit:git-format-patch[1], linkgit:git-imap-send[1], mbox(5)

GIT
---
Part of the linkgit:git[1] suite
