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

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


SYNOPSIS
--------
'git-send-email' [options] <file|directory> [... file|directory]



DESCRIPTION
-----------
Takes the patches given on the command line and emails them out.

The header of the email is configurable by 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.

OPTIONS
-------
The options available are:

--bcc::
	Specify a "Bcc:" value for each email.
+
The --bcc option must be repeated for each user you want on the bcc list.

--cc::
	Specify a starting "Cc:" value for each email.
+
The --cc option must be repeated for each user you want on the cc list.

--cc-cmd::
	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.

--chain-reply-to, --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.
	Default is the value of the 'sendemail.chainreplyto' configuration
	value; if that is unspecified, default to --chain-reply-to.

--compose::
	Use $GIT_EDITOR, core.editor, $VISUAL, or $EDITOR to edit an
	introductory message for the patch series.

--from::
	Specify the sender of the emails.  This will default to
	the value GIT_COMMITTER_IDENT, as returned by "git-var -l".
	The user will still be prompted to confirm this entry.

--in-reply-to::
	Specify the contents of the first In-Reply-To header.
	Subsequent emails will refer to the previous email
	instead of this if --chain-reply-to is set (the default)
	Only necessary if --compose is also set.  If --compose
	is not set, this will be prompted for.

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

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

--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'.

--smtp-server::
	If set, specifies the outgoing SMTP server to use (e.g.
	`smtp.example.com` or a raw IP address).  Alternatively it can
	specify a full pathname of a sendmail-like program instead;
	the program must support the `-i` option.  Default value can
	be specified by the 'sendemail.smtpserver' configuration
	option; the built-in default is `/usr/sbin/sendmail` or
	`/usr/lib/sendmail` if such program is available, or
	`localhost` otherwise.

--smtp-server-port::
	Specifies a port different from the default port (SMTP
	servers typically listen to smtp port 25 and ssmtp port
	465).

--smtp-user, --smtp-pass::
	Username and password for SMTP-AUTH. Defaults are the values of
	the configuration values 'sendemail.smtpuser' and
	'sendemail.smtppass', but see also 'sendemail.identity'.
	If not set, authentication is not attempted.

--smtp-ssl::
	If set, connects to the SMTP server using SSL.
	Default is the value of the 'sendemail.smtpssl' configuration value;
	if that is unspecified, does not use SSL.

--subject::
	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.

--suppress-from, --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.

--thread, --no-thread::
	If this is set, the In-Reply-To header will be set on each email sent.
	If disabled with "--no-thread", no emails will have the In-Reply-To
	header set.
	Default is the value of the 'sendemail.thread' configuration value;
	if that is unspecified, default to --thread.

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

--envelope-sender::
	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. If you use the sendmail binary, you must have
	suitable privileges for the -f parameter.

--to::
	Specify the primary recipient of the emails generated.
	Generally, this will be the upstream maintainer of the
	project involved.
+
The --to option must be repeated for each user you want on the to list.


CONFIGURATION
-------------
sendemail.identity::
	The default configuration identity. When specified,
	'sendemail.<identity>.<item>' will have higher precedence than
	'sendemail.<item>'. This is useful to declare multiple SMTP
	identities and to hoist sensitive authentication information
	out of the repository and into the global configuration file.

sendemail.aliasesfile::
	To avoid typing long email addresses, point this to one or more
	email aliases files.  You must also supply 'sendemail.aliasfiletype'.

sendemail.aliasfiletype::
	Format of the file(s) specified in sendemail.aliasesfile. Must be
	one of 'mutt', 'mailrc', 'pine', or 'gnus'.

sendemail.to::
	Email address (or alias) to always send to.

sendemail.cccmd::
	Command to execute to generate per patch file specific "Cc:"s.

sendemail.bcc::
	Email address (or alias) to always bcc.

sendemail.chainreplyto::
	Boolean value specifying the default to the '--chain_reply_to'
	parameter.

sendemail.smtpserver::
	Default SMTP server to use.

sendemail.smtpuser::
	Default SMTP-AUTH username.

sendemail.smtppass::
	Default SMTP-AUTH password.

sendemail.smtpssl::
	Boolean value specifying the default to the '--smtp-ssl' parameter.

Author
------
Written by Ryan Anderson <ryan@michonline.com>

git-send-email is originally based upon
send_lots_of_email.pl by Greg Kroah-Hartman.

Documentation
--------------
Documentation by Ryan Anderson

GIT
---
Part of the gitlink:git[7] suite
