| git-send-email(1) |
| ================= |
| |
| NAME |
| ---- |
| git-send-email - Send a collection of patches as emails |
| |
| |
| SYNOPSIS |
| -------- |
| [verse] |
| 'git send-email' [options] <file|directory|rev-list options>... |
| 'git send-email' --dump-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. |
| |
| 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, Subject, 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 From, Subject, |
| and In-Reply-To headers 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". |
| |
| --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):: |
| 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. Default is the value of the `sendemail.transferEncoding` |
| configuration value; if that is unspecified, git will use 8bit and not |
| add a Content-Transfer-Encoding header. |
| |
| --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. |
| |
| --smtp-encryption=<encryption>:: |
| Specify the encryption to use, either 'ssl' or 'tls'. Any other |
| value reverts to plain SMTP. 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. |
| |
| --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'. |
| |
| --smtp-server=<host>:: |
| 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=<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 faliure 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 |
| ~~~~~~~~~~ |
| |
| --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. |
| |
| --[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 Signed-off-by: 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 Signed-off-by lines except |
| for self (use 'self' for that). |
| - 'cccmd' will avoid running the --cc-cmd. |
| - 'body' is equivalent to 'sob' + 'bodycc' |
| - '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. |
| |
| |
| 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; this |
| is due to SMTP limits as described by http://www.ietf.org/rfc/rfc2821.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, |
| this only includes the alias name and not its expanded email addresses. |
| See 'sendemail.aliasesfile' for more information about aliases. |
| |
| |
| CONFIGURATION |
| ------------- |
| |
| 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', 'elm', or 'gnus', or 'sendmail'. |
| + |
| What an alias file in each format looks like can be found in |
| the documentation of the email program of the same name. The |
| differences and limitations from the standard formats are |
| described below: |
| + |
| -- |
| sendmail;; |
| * Quoted aliases and quoted addresses are not supported: lines that |
| contain a `"` symbol are ignored. |
| * Redirection to a file (`/path/name`) or pipe (`|command`) is not |
| supported. |
| * File inclusion (`:include: /path/name`) is not supported. |
| * Warnings are printed on the standard error output for any |
| explicitly unsupported constructs, and any other lines that are not |
| recognized by the parser. |
| -- |
| |
| sendemail.multiEdit:: |
| If true (default), a single editor instance will be spawned to edit |
| files you have to edit (patches when `--annotate` is used, and the |
| summary when `--compose` is used). If false, files will be edited one |
| after the other, spawning a new editor each time. |
| |
| sendemail.confirm:: |
| Sets the default for whether to confirm before sending. Must be |
| one of 'always', 'never', 'cc', 'compose', or 'auto'. See `--confirm` |
| in the previous section for the meaning of these values. |
| |
| EXAMPLE |
| ------- |
| 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 multifactor authentication setup on your gmail account, you will |
| need to generate an app-specific password for use with 'git send-email'. Visit |
| https://security.google.com/settings/security/apppasswords to setup an |
| app-specific password. Once setup, you can store it with the credentials |
| helper: |
| |
| $ git credential fill |
| protocol=smtp |
| host=smtp.gmail.com |
| username=youname@gmail.com |
| password=app-password |
| |
| |
| 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/* |
| |
| Note: the following perl modules are required |
| Net::SMTP::SSL, MIME::Base64 and Authen::SASL |
| |
| SEE ALSO |
| -------- |
| linkgit:git-format-patch[1], linkgit:git-imap-send[1], mbox(5) |
| |
| GIT |
| --- |
| Part of the linkgit:git[1] suite |