English ▾ 主題 ▾ 最新版本 ▾ git-send-email 最後更新於 2.55.0

名稱

git-send-email - 以電子郵件寄送一系列修補程式

概要

git send-email [<options>] (<file>|<directory>)…​
git send-email [<options>] <format-patch-options>
git send-email --dump-aliases
git send-email --translate-aliases

描述

接收命令列提供的修補程式並透過電子郵件寄出。修補程式可以指定為檔案、目錄(將寄送目錄中的所有檔案)或直接作為修訂列表。在最後一種情況下,任何 git-format-patch[1] 接受的格式,以及 git-format-patch[1] 能理解的選項,都可以傳遞給 git send-email

電子郵件的標頭可透過命令列選項進行設定。如果未在命令列中指定,系統將提示使用者透過啟用 ReadLine 的介面提供必要的資訊。

修補程式檔案接受兩種格式

  1. mbox 格式檔案

    這是 git-format-patch[1] 所產生的格式。大多數標頭和 MIME 格式都會被忽略。

  2. Greg Kroah-Hartman 的 send_lots_of_email.pl 指令碼所使用的原始格式

    此格式要求檔案的第一行包含 Cc: 值,第二行包含訊息的 Subject:(主旨)。

選項

撰寫

--annotate

在寄送前審閱並編輯每個修補程式。預設值為 sendemail.annotate 的值。請參閱 CONFIGURATION 區段中的 sendemail.multiEdit

--bcc=<address>,…​

為每封電子郵件指定 Bcc: 值。預設值為 sendemail.bcc 的值。

此選項可以多次指定。

--cc=<address>,…​

為每封電子郵件指定初始 Cc: 值。預設值為 sendemail.cc 的值。

此選項可以多次指定。

--compose

呼叫文字編輯器(參閱 git-var[1] 中的 GIT_EDITOR)來編輯修補程式系列的介紹訊息。

當使用 --compose 時,git send-email 將會使用訊息中指定的 FromToCcBccSubjectReply-To 以及 In-Reply-To 標頭。如果訊息本文(標頭與空行之後輸入的內容)僅包含空白行(或以 Git: 開頭的行),則摘要將不會被寄出,但上述標頭仍會被使用(除非已被刪除)。

如果缺少 FromIn-Reply-To 標頭,系統將會提示輸入。

請參閱 CONFIGURATION 區段中的 sendemail.multiEdit

--from=<address>

指定電子郵件的寄件者。若未在命令列指定,則使用 sendemail.from 設定選項的值。如果命令列選項與 sendemail.from 皆未設定,則系統將提示使用者輸入該值。提示的預設值將是 GIT_AUTHOR_IDENT 的值,若未設定則為 GIT_COMMITTER_IDENT 的值,如同 git var -l 所傳回的內容。

--reply-to=<address>

指定收件者回覆時應寄送到的地址。如果回覆訊息的目的地應與 --from 參數指定的地址不同,請使用此參數。

--in-reply-to=<identifier>

使第一封郵件(或所有使用 --no-thread 的郵件)顯示為給定 Message-ID 的回覆,以避免因提供新的修補程式系列而中斷討論串。第二封及之後的電子郵件將根據 --[no-]chain-reply-to 設定作為回覆寄出。

例如,當指定 --thread--no-chain-reply-to 時,第二封及後續修補程式將會是第一封的回覆,如下圖所示,其中 [PATCH v2 0/3] 是對 [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

僅在同時設定了 --compose 時才需要。如果未設定 --compose,系統將會提示輸入。

--outlook-id-fix
--no-outlook-id-fix

Microsoft Outlook SMTP 伺服器會丟棄電子郵件中傳送的 Message-ID 並指派一個新的隨機 Message-ID,從而破壞討論串。

使用 --outlook-id-fix 時,git send-email 會使用 Outlook 伺服器專用的機制來獲取伺服器所指派的 Message-ID 以修復討論串。僅在您確認該伺服器回報重新改寫後的 Message-ID 的方式與 Outlook 伺服器相同時,才使用此功能。

若未指定此選項,在與 smtp.office365.comsmtp-mail.outlook.com 通訊時,預設會執行此修復。使用 --no-outlook-id-fix 即使與上述兩個伺服器通訊時也能停用該功能。

--subject=<string>

指定電子郵件討論串的初始主旨。僅在同時設定了 --compose 時才需要。如果未設定 --compose,系統將會提示輸入。

--to=<address>,…​

指定所產生電子郵件的主要收件者。通常這會是該專案的上游維護者。預設值為 sendemail.to 設定的值;若未指定且未指定 --to-cmd,系統將會提示輸入。

此選項可以多次指定。

--8bit-encoding=<encoding>

當遇到非 ASCII 訊息或主旨且未宣告其編碼時,添加標頭/引號以指出它以 <encoding> 編碼。預設值為 sendemail.assume8bitEncoding 的值;若未指定,則在遇到任何非 ASCII 檔案時會提示輸入。

請注意,系統不會進行任何驗證編碼的嘗試。

--compose-encoding=<encoding>

指定撰寫訊息的編碼。預設值為 sendemail.composeEncoding 的值;若未指定,則預設為 UTF-8。

--transfer-encoding=(7bit|8bit|quoted-printable|base64|auto)

指定透過 SMTP 寄送訊息時使用的傳輸編碼。7bit 在遇到非 ASCII 訊息時會失敗。quoted-printable 在儲存庫包含含有歸位字元的檔案時很有用,但會使原始修補程式電子郵件檔案(從郵件客戶端儲存時)更難手動檢視。base64 雖然更保險,但也更不透明。auto 會在可能時使用 8bit,否則使用 quoted-printable

預設值為 sendemail.transferEncoding 設定的值;若未指定,預設為 auto

--xmailer
--no-xmailer

添加(或防止添加)X-Mailer: 標頭。預設會添加該標頭,但可以透過將 sendemail.xmailer 設定變數設為 false 來關閉。

寄送

--envelope-sender=<address>

指定寄送電子郵件時使用的信封寄件者 (Envelope Sender)。如果您的預設地址不是訂閱清單的地址,這會很有用。為了使用 From 地址,請將值設為 auto。如果您使用 sendmail 二進位檔案,您必須擁有 -f 參數的適當權限。預設值為 sendemail.envelopeSender 設定變數的值;若未指定,選擇信封寄件者的工作將由您的 MTA 決定。

--sendmail-cmd=<command>

指定寄送電子郵件時執行的命令。該命令應類比 sendmail;具體來說,它必須支援 -i 選項。如有必要,該命令將在 shell 中執行。預設值為 sendemail.sendmailCmd 的值。若未指定,且未指定 --smtp-servergit send-email 將在 /usr/sbin/usr/lib$PATH 中搜尋 sendmail

--smtp-encryption=<encryption>

指定 SMTP 連線如何開始加密。有效值為 ssltls。任何其他值都會回復到普通的(非加密)SMTP,預設使用連接埠 25。儘管名稱不同,兩個值都會使用相同的較新版本 TLS,但由於歷史原因保留了這些名稱。ssl 指的是「隱式」加密(有時稱為 SMTPS),預設使用連接埠 465。tls 指的是「顯式」加密(通常稱為 STARTTLS),預設使用連接埠 25。SMTP 伺服器可能會使用非預設的其他連接埠。常見的 tls 與非加密連接埠為 587。您需要檢查提供者的文件或伺服器設定以確認您個人的情況。預設值為 sendemail.smtpEncryption 的值。

--smtp-domain=<FQDN>

指定在 HELO/EHLO 命令中傳送給 SMTP 伺服器的完整網域名稱 (FQDN)。某些伺服器要求 FQDN 必須與您的 IP 位址相符。若未設定,git send-email 會嘗試自動判斷您的 FQDN。預設值為 sendemail.smtpDomain 的值。

--smtp-auth=<mechanisms>

以空格分隔允許的 SMTP-AUTH 機制列表。此設定強制僅使用列出的機制。範例

$ git send-email --smtp-auth="PLAIN LOGIN GSSAPI" ...

如果指定的機制中至少有一個與 SMTP 伺服器宣稱的機制相符,且受所用 SASL 程式庫支援,則該機制將用於身份驗證。如果未指定 sendemail.smtpAuth 也不指定 --smtp-auth,則 SASL 程式庫支援的所有機制皆可使用。可以指定特殊值 none 來完全停用身份驗證,這與 --smtp-user 無關。

--smtp-pass[=<password>]

SMTP-AUTH 的密碼。參數是選用的:如果未指定參數,則使用空字串作為密碼。預設值為 sendemail.smtpPass 的值,但 --smtp-pass 總是會覆寫此值。

此外,密碼不需要在設定檔或命令列中指定。如果已指定使用者名稱(透過 --smtp-usersendemail.smtpUser),但未指定密碼(透過 --smtp-passsendemail.smtpPass),則會使用 git-credential[1] 取得密碼。

--no-smtp-auth

停用 SMTP 身份驗證。這是 --smtp-auth=none 的簡寫。

--smtp-server=<host>

指定要使用的外寄 SMTP 伺服器(例如 smtp.example.com 或原始 IP 位址)。若未指定,且亦未指定 --sendmail-cmd,預設會在 /usr/sbin/usr/lib$PATH 中搜尋 sendmail(如果有的話),否則會回退到 localhost

為了向後相容,此選項也可以指定類比 sendmail 程式的完整路徑;該程式必須支援 -i 選項。此方法不支援傳遞參數或使用簡單的指令名稱。對於這些使用場景,請考慮改用 --sendmail-cmd

--smtp-server-port=<port>

指定不同於預設連接埠的連接埠(SMTP 伺服器通常監聽 smtp 連接埠 25,但亦可能監聽提交連接埠 587,或常見的 SSL smtp 連接埠 465);也接受符號名稱(例如 submission 而非 587)。連接埠也可以透過 sendemail.smtpServerPort 設定變數設定。

--smtp-server-option=<option>

指定要使用的外寄 SMTP 伺服器選項。預設值可由 sendemail.smtpServerOption 設定選項指定。

--smtp-server-option 選項必須為您想要傳遞給伺服器的每個選項重複指定。同樣地,設定檔中的不同行必須用於每個選項。

--smtp-ssl

--smtp-encryption ssl 的舊式別名。

--smtp-ssl-cert-path <path>

用於 SMTP SSL/TLS 憑證驗證的可信 CA 憑證儲存路徑(可以是已由 c_rehash 處理過的目錄,或是包含一個或多個 PEM 格式憑證的單一檔案:關於這些選項的更多資訊,請參閱 https://docs.openssl.org/master/man1/openssl-verify/ [OpenSSL 的 verify(1) 手冊頁] 中 -CAfile <file>-CApath <dir> 選項的說明)。將其設為空字串即可停用憑證驗證。預設值為 sendemail.smtpSSLCertPath 設定變數的值(若已設定),否則為後端 SSL 程式庫編譯時的預設值(這在大多數平台上應該是最佳選擇)。

--smtp-ssl-client-cert <path>

若伺服器要求,需提供用戶端憑證檔案的路徑。當伺服器設定為驗證用戶端憑證時,此選項為必要。如果檔案中未包含對應的私密金鑰,則必須使用 sendemail.smtpSSLClientKey 設定變數或 --smtp-ssl-client-key 選項提供。預設值為 sendemail.smtpSSLClientCert 設定變數的值(若已設定)。

--smtp-ssl-client-key <path>

對應於用戶端憑證的用戶端私密金鑰檔案路徑。為避免設定錯誤,此選項必須與 sendemail.smtpSSLClientKey 設定變數或 --smtp-ssl-client-cert 選項結合使用。如果客戶端金鑰已包含在客戶端憑證中,則私密金鑰的選擇取決於憑證的格式。請造訪 https://metacpan.org/pod/IO::Socket::SSL 以獲取更多詳細資訊。預設值為 sendemail.smtpSSLClientKey 設定變數的值(若已設定)。

--smtp-user=<user>

SMTP-AUTH 的使用者名稱。預設值為 sendemail.smtpUser 的值;若未指定使用者名稱(透過 --smtp-usersendemail.smtpUser),則不會嘗試進行身份驗證。

--smtp-debug=(0|1)

啟用 (1) 或停用 (0) 偵錯輸出。如果啟用,SMTP 命令與回覆將會被列印。有助於偵錯 TLS 連線與身份驗證問題。

--imap-sent-folder=<folder>

某些電子郵件提供者(例如 iCloud)不會將使用 SMTP 寄送的電子郵件副本傳送到您信箱中的 Sent 資料夾或類似位置。請使用此選項利用 git imap-send 將電子郵件副本寄送到此選項指定的資料夾。您可以執行 git imap-send --list 來取得有效資料夾名稱的列表,包含您信箱中正確的 Sent 資料夾名稱。您也可以使用此選項將電子郵件寄送到您選擇的指定 IMAP 資料夾。

此功能需要設定 git imap-send。相關說明請參閱 git-imap-send[1]

--use-imap-only
--no-use-imap-only

如果設定此項,所有電子郵件將僅複製到使用 --imap-sent-foldersendemail.imapSentFolder 指定的 IMAP 資料夾,而不會寄送給收件者。如果您只是想建立電子郵件草稿並使用其他電子郵件客戶端來寄送,這會很有用。若使用 --no-use-imap-only 停用,電子郵件將如常寄送。預設為停用,但可以使用 sendemail.useImapOnly 設定變數來啟用。

此功能需要設定 git imap-send。相關說明請參閱 git-imap-send[1]

--batch-size=<num>

某些電子郵件伺服器(例如 smtp.163.com)會限制每個對話(連線)中可寄送的電子郵件數量,這會導致寄送多封郵件時失敗。使用此選項,send-email 會在寄送 <num> 封郵件後中斷連線,等待幾秒鐘(參閱 --relogin-delay),然後重新連線,以規避此限制。您可能希望使用某種形式的憑證輔助工具,以避免每次發生此情況時都需要重新輸入密碼。預設為 sendemail.smtpBatchSize 設定變數。

--relogin-delay=<int>

在重新連線至 SMTP 伺服器前等待 <int> 秒。與 --batch-size 選項搭配使用。預設為 sendemail.smtpReloginDelay 設定變數。

自動化

--no-to
--no-cc
--no-bcc

清除之前透過設定檔設定的任何 To:Cc:Bcc: 地址列表。

--no-identity

清除先前透過設定檔讀取的 sendemail.identity 值(若有的話)。

--to-cmd=<command>

指定每個修補程式檔案執行一次的命令,該命令應產生特定於修補程式檔案的 To: 項目。此命令的輸出必須為每行一個電子郵件地址。預設值為 sendemail.toCmd 設定值。

--cc-cmd=<command>

指定每個修補程式檔案執行一次的命令,該命令應產生特定於修補程式檔案的 Cc: 項目。此命令的輸出必須為每行一個電子郵件地址。預設值為 sendemail.ccCmd 設定值。

--header-cmd=<command>

指定一個命令,該命令會對每個外寄訊息執行一次,並輸出 RFC 2822 風格的標頭行以插入其中。當設定了 sendemail.headerCmd 設定變數時,總是使用該值。當在命令列提供 --header-cmd 時,其值優先於 sendemail.headerCmd 設定變數。

--no-header-cmd

停用任何正在使用的標頭命令。

--chain-reply-to
--no-chain-reply-to

如果設定此項,每封電子郵件都將作為前一封寄出郵件的回覆寄出。若使用 --no-chain-reply-to 停用,則除了第一封以外的所有郵件都將作為對第一封寄出郵件的回覆寄出。使用此功能時,建議提供的第一個檔案應為整個修補程式系列的概覽。預設為停用,但可以使用 sendemail.chainReplyTo 設定變數來啟用。

--identity=<identity>

設定身份。提供時,會使 sendemail.<identity> 小節中的值優先於 sendemail 小節中的值。預設身份為 sendemail.identity 的值。

--signed-off-by-cc
--no-signed-off-by-cc

如果設定此項,將在 Signed-off-by 尾部或 Cc: 行中找到的電子郵件新增至 cc 列表。預設值為 sendemail.signedOffByCc 設定值;若未指定,則預設為 --signed-off-by-cc

--cc-cover
--no-cc-cover

如果設定此項,系列中第一個修補程式(通常是封面信)的 Cc: 標頭中找到的電子郵件將新增至每封郵件的 cc 列表。預設值為 sendemail.ccCover 設定值;若未指定,則預設為 --no-cc-cover

--to-cover
--no-to-cover

如果設定此項,系列中第一個修補程式(通常是封面信)的 To: 標頭中找到的電子郵件將新增至每封郵件的 to 列表。預設值為 sendemail.toCover 設定值;若未指定,則預設為 --no-to-cover

--suppress-cc=<category>

指定要取消自動抄送的額外收件者類別

  • author 將避免包含修補程式作者。

  • self 將避免包含寄件者本人。

  • cc 將避免包含修補程式標頭中 Cc 行提到的任何人(自身除外,請使用 self)。

  • bodycc 將避免包含修補程式內文(提交訊息)中 Cc 行提到的任何人(自身除外,請使用 self)。

  • sob 將避免包含 Signed-off-by 尾部中提到的任何人(自身除外,請使用 self)。

  • misc-by 將避免包含修補程式內文中 Acked-by、Reviewed-by、Tested-by 以及其他 "-by" 行中提到的任何人,但不包含 Signed-off-by(請使用 sob)。

  • cccmd 將避免執行 --cc-cmd。

  • body 等同於 sob + bodycc + misc-by

  • all 將取消所有自動抄送值。

預設值為 sendemail.suppressCc 設定值;若未指定,則在指定 --suppress-from 時預設為 self,若指定 --no-signed-off-by-cc 時預設為 body

--suppress-from
--no-suppress-from

如果設定此項,請勿將 From: 地址新增至 Cc: 列表。預設值為 sendemail.suppressFrom 設定值;若未指定,則預設為 --no-suppress-from

--thread
--no-thread

如果設定此項,In-Reply-ToReferences 標頭將新增至每封寄出的電子郵件。每封郵件是指向上一封郵件(根據 git format-patch 的措辭,稱為 deep 串列)還是指向第一封郵件(稱為 shallow 串列),由 --[no-]chain-reply-to 決定。

若使用 --no-thread 停用,這些標頭將不會新增(除非使用 --in-reply-to 指定)。預設值為 sendemail.thread 設定值;若未指定,則預設為 --thread

使用者需自行確保在要求 git send-email 添加 In-Reply-To 標頭時,該標頭尚未存在(特別請注意 git format-patch 本身可以設定為執行串列)。否則,結果可能不會符合收件者郵件客戶端的預期。

--mailmap
--no-mailmap

使用 mailmap 檔案(參閱 gitmailmap[5])將所有地址映射為其規範的真實姓名與電子郵件地址。專用於 git send-email 的額外 mailmap 資料可以使用 sendemail.mailmap.filesendemail.mailmap.blob 設定值提供。預設為 sendemail.mailmap

管理

--confirm=<mode>

在寄送前進行確認

  • always 將總是在寄送前進行確認。

  • never 將從不在寄送前進行確認。

  • cc 將在 send-email 已自動從修補程式新增地址到 Cc 列表時,於寄送前確認。

  • compose 將在使用 --compose 時,於寄送第一封訊息前確認。

  • auto 等同於 cc + compose

預設值為 sendemail.confirm 設定值;若未指定,則預設為 auto,除非指定了任何抑制選項,在這種情況下預設為 compose

--dry-run

執行除實際寄送電子郵件以外的所有操作。

--format-patch
--no-format-patch

當參數可能同時被理解為參考或檔名時,選擇將其理解為 format-patch 參數 (--format-patch) 或檔名 (--no-format-patch)。預設情況下,當發生這種衝突時,git send-email 將會失敗。

--quiet

使 git send-email 輸出較少的資訊。應僅輸出每封郵件一行。

--validate
--no-validate

對修補程式執行合理性檢查。目前,驗證代表以下內容

  • 呼叫 sendemail-validate 掛鉤(若存在,參閱 githooks[5])。

  • 針對包含長度超過 998 個字元行的修補程式發出警告,除非使用適當的傳輸編碼(autobase64quoted-printable);這是由於 https://www.ietf.org/rfc/rfc5322.txt 所描述的 SMTP 限制。

預設值為 sendemail.validate 的值;若未設定,則預設為 --validate

--force

即使安全檢查會阻止,仍要寄送電子郵件。

資訊

--dump-aliases

執行非正常操作,改為傾印來自已設定別名檔案的簡寫別名名稱,按字母順序每行一個。請注意,這僅包含別名名稱,不包含其展開後的電子郵件地址。有關別名的詳細資訊,請參閱 sendemail.aliasesFile

--translate-aliases

執行非正常操作,改為讀取標準輸入,並將每行解釋為電子郵件別名。根據已設定的別名檔案進行翻譯。將每個翻譯後的名稱與電子郵件地址輸出至標準輸出,每行一個。有關別名的詳細資訊,請參閱 sendemail.aliasFile

組態設定 (CONFIGURATION)

本節中此行以下的內容是從 git-config[1] 文件中選擇性包含的。內容與該處找到的內容相同

sendemail.identity

設定身份。提供時,會使 sendemail.<identity> 小節中的值優先於 sendemail 小節中的值。預設身份為 sendemail.identity 的值。

sendemail.smtpEncryption

請參閱 git-send-email[1] 以取得說明。請注意,此設定不受 identity 機制限制。

sendemail.smtpSSLCertPath

ca-certificates 的路徑(目錄或單一檔案)。將其設為空字串以停用憑證驗證。

sendemail.smtpSSLClientCert

若伺服器要求,需提供用戶端憑證檔案的路徑。當伺服器設定為驗證用戶端憑證時,此為必要。如果檔案中未包含對應的私密金鑰,則必須使用 sendemail.smtpSSLClientKey--smtp-ssl-client-key 選項提供。

sendemail.smtpSSLClientKey

對應於用戶端憑證的用戶端私密金鑰檔案路徑。為避免設定錯誤,此設定必須與 sendemail.smtpSSLClientCert--smtp-ssl-client-cert 選項結合使用。如果客戶端金鑰已包含在客戶端憑證中,則私密金鑰的選擇取決於憑證的格式。請造訪 https://metacpan.org/pod/IO::Socket::SSL 以獲取更多詳細資訊。

sendemail.<identity>.*

下方 sendemail.* 參數的身份特定版本,當透過命令列或 sendemail.identity 選擇此身份時,這些參數優先於對應的通用設定。

sendemail.multiEdit

如果為 true(預設值),將會啟動單一編輯器執行個體來編輯您需要編輯的檔案(當使用 --annotate 時的修補程式,以及使用 --compose 時的摘要)。如果為 false,檔案將會逐一編輯,每次都會啟動新的編輯器。

sendemail.confirm

設定寄送前是否確認的預設值。必須為 alwaysnevercccomposeauto 之一。這些值的意義請參閱 git-send-email[1] 文件中的 --confirm

sendemail.mailmap

如果為 true,使 git-send-email[1] 預設啟用 --mailmap,否則預設啟用 --no-mailmap。預設為 False

sendemail.mailmap.file

特定於 git-send-email[1] 的增強 mailmap 檔案位置。預設的 mailmap 和 mailmap.file 會優先載入。因此,此檔案中的項目優先於預設 mailmap 位置中的項目。參閱 gitmailmap[5]

sendemail.mailmap.blob

類似 sendemail.mailmap.file,但將該值視為指向儲存庫中 blob 的參考。sendemail.mailmap.file 中的項目優先於此處的項目。參閱 gitmailmap[5]

sendemail.aliasesFile

為避免輸入長電子郵件地址,請將此指向一個或多個電子郵件別名檔案。您也必須提供 sendemail.aliasFileType

sendemail.aliasFileType

在 sendemail.aliasesFile 中指定的檔案格式。必須為 muttmailrcpineelmgnussendmail 之一。

每一種格式的別名檔案樣貌可在同名電子郵件程式的文件中找到。與標準格式的差異與限制描述如下

sendmail
  • 不支援帶引號的別名與帶引號的地址:包含 " 符號的行將被忽略。

  • 不支援重導向至檔案 (/path/name) 或管線 (|command)。

  • 不支援檔案包含 (:include: /path/name)。

  • 對於任何明確不支援的建構,以及解析器無法識別的其他任何行,將會在標準錯誤輸出上列印警告。

sendemail.annotate
sendemail.bcc
sendemail.cc
sendemail.ccCmd
sendemail.chainReplyTo
sendemail.envelopeSender
sendemail.from
sendemail.headerCmd
sendemail.signedOffByCc
sendemail.smtpPass
sendemail.suppressCc
sendemail.suppressFrom
sendemail.to
sendemail.toCmd
sendemail.smtpDomain
sendemail.smtpServer
sendemail.smtpServerPort
sendemail.smtpServerOption
sendemail.smtpUser
sendemail.imapSentFolder
sendemail.useImapOnly
sendemail.thread
sendemail.transferEncoding
sendemail.validate
sendemail.xmailer

這些設定變數皆提供 git-send-email[1] 命令列選項的預設值。詳細資訊請參閱其文件。

sendemail.outlookidfix

如果為 true,使 git-send-email[1] 預設啟用 --outlook-id-fix,如果為 false 則預設啟用 --no-outlook-id-fix。若未指定,其行為將與未指定 --outlook-id-fix 時相同。

sendemail.signedOffCc (已棄用)

sendemail.signedOffByCc 的已棄用別名。

sendemail.smtpBatchSize

每個連線中要寄送的訊息數量,之後會進行重新登入。如果值為 0 或未定義,則在單一連線中寄送所有訊息。另請參閱 git-send-email[1]--batch-size 選項。

sendemail.smtpReloginDelay

重新連線至 smtp 伺服器前等待的秒數。另請參閱 git-send-email[1]--relogin-delay 選項。

sendemail.forbidSendmailVariables

為避免常見的錯誤設定,如果存在任何 sendmail 的設定選項,git-send-email[1] 將會終止並發出警告。設定此變數以略過該檢查。

SMTP 伺服器範例

使用 Gmail 作為 SMTP 伺服器

若要使用 git send-email 透過 Gmail SMTP 伺服器寄送修補程式,請編輯 ~/.gitconfig 以指定您的帳號設定

[sendemail]
	smtpEncryption = ssl
	smtpServer = smtp.gmail.com
	smtpUser = yourname@gmail.com
	smtpServerPort = 465

Gmail 不允許在 git send-email 中使用您的常規密碼。如果您在 Gmail 帳號上設定了雙重驗證,您可以產生一個應用程式專用密碼以用於 git send-email。請造訪 https://security.google.com/settings/security/apppasswords 進行建立。

或者,除了使用應用程式專用密碼外,您也可以使用 OAuth2.0 身份驗證來使用 Gmail。OAuth2.0 比應用程式專用密碼更安全,且無論您是否設定了雙重驗證皆可運作。OAUTHBEARERXOAUTH2 是此類型身份驗證常用的機制。Gmail 兩者皆支援。例如,如果您想使用 OAUTHBEARER,請編輯您的 ~/.gitconfig 檔案,並在您的帳號設定中加入 smtpAuth = OAUTHBEARER

[sendemail]
	smtpEncryption = ssl
	smtpServer = smtp.gmail.com
	smtpUser = yourname@gmail.com
	smtpServerPort = 465
	smtpAuth = OAUTHBEARER

另一個替代方案是使用 Google 開發的名為 sendgmail 的工具,透過 git send-email 寄送電子郵件。

使用 Microsoft Outlook 作為 SMTP 伺服器

與 Gmail 不同,Microsoft Outlook 不再支援應用程式專用密碼。因此,必須使用 OAuth2.0 身份驗證。此外,它僅支援 XOAUTH2 身份驗證機制。

編輯 ~/.gitconfig 以指定您的 Outlook 帳號設定,並使用其 SMTP 伺服器與 git send-email

[sendemail]
	smtpEncryption = tls
	smtpServer = smtp.office365.com
	smtpUser = yourname@outlook.com
	smtpServerPort = 587
	smtpAuth = XOAUTH2

寄送修補程式

當您的提交準備好寄送到郵件列表後,請執行以下命令

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

首次執行時,系統將會提示您輸入憑證。請輸入應用程式專用密碼或您的常規密碼(視情況而定)。

如果您已設定憑證輔助工具(參閱 git-credential[1]),密碼將會儲存於憑證儲存庫中,下次執行時便無須再次輸入。

如果您使用 OAuth2.0 身份驗證,當系統提示時,您需要使用存取權杖 (Access Token) 來取代密碼。線上有多種 OAuth2.0 權杖產生器可供使用。社群維護的憑證輔助工具也可用

您也可以參閱 gitcredentials[7] 以了解更多基於 OAuth 的身份驗證輔助工具。

Proton Mail 不提供用於寄送電子郵件的 SMTP 伺服器。如果您是 Proton Mail 的付費客戶,您可以使用 Proton Mail 官方提供的 Proton Mail Bridge 來建立一個本機 SMTP 伺服器以寄送電子郵件。對於免費與付費使用者,皆可使用社群維護的專案,例如 git-protonmail

注意:需要安裝您的 Perl 發行版中可能包含的以下核心 Perl 模組

也需要以下額外的 Perl 模組

利用 git send-emailsendmailCmd 選項

除了透過 SMTP 伺服器寄送電子郵件外,git send-email 還可以透過任何支援類比 sendmail 命令的應用程式來寄送電子郵件。您可以閱讀上述關於 --sendmail-cmd=<command> 的文件以取得更多資訊。如果您想使用其他應用程式作為 git send-email 的 SMTP 客戶端,或者如果您的電子郵件提供者使用專有 API 而非 SMTP 來寄送郵件,此功能將非常有用。

例如,讓我們看看如何設定 msmtp,這是許多 Linux 發行版中常見的熱門 SMTP 客戶端。編輯 ~/.gitconfig 以指示 git-send-email 使用它來寄送電子郵件。

[sendemail]
	sendmailCmd = /usr/bin/msmtp # Change this to the path where msmtp is installed

以下是一些此類社群維護的輔助工具連結

  • msmtp (功能豐富的熱門 SMTP 客戶端,適用於 Linux 和 macOS)

  • git-protonmail (可使用 ProtonMail API 寄送電子郵件的跨平台客戶端)

  • git-msgraph (可使用 Microsoft Graph API 寄送電子郵件的跨平台客戶端)

注意事項

git-format-patch[1] 的輸出在使用 git-am[1] 應用時可能會導致不同的提交訊息。所應用的修補程式也可能與原始生成的修補程式不同,或者修補程式應用可能會徹底失敗。

任何形式為

  • 三個破折號和換行符,或

  • diff - 開頭的行,或

  • 以 `Index: ` 開頭的行

都被視為補丁的開始,提交日誌訊息將在第一次出現此類行之前終止。

請注意,對於提交訊息中出現的未縮排 diff,這尤其成問題;提交訊息中的 diff 可能會連同補丁部分一起被套用,或者補丁套用機制可能會因為補丁目標不適用而絆倒。例如,這可能是由 Markdown 程式碼區塊中的 diff 引起的。

解決此問題的方法是縮排 diff 或其他可能導致問題的文字。

如果您直接從郵箱套用補丁,這種保真度的缺失可能很容易被注意到。然而,源自 Git 的變更可能會被大量套用,在這種情況下,這將很難被注意到。例如,一個 Linux 發行版可能會使用補丁檔案在上游儲存庫的提交之上套用變更。這說明了這種行為不僅影響電子郵件工作流程。

鑑於這些限制,人們可能會傾向於使用像 patch(1) 這樣的通用工具。然而,patch(1) 不僅會尋找未縮排的 diff(如同 git-am[1]),還會嘗試套用縮排的 diff。

GIT

git[1] 套件的一部分