简体中文 ▾ 主题 ▾ 最新版本 ▾ git-imap-send 最后更新于 2.51.0

名称

git-imap-send - 将来自 stdin 的补丁集合发送到 IMAP 文件夹

概要

git imap-send [-v] [-q] [--[no-]curl] [(--folder|-f) <folder>]
git imap-send --list

描述

此命令将使用 git format-patch 生成的邮箱上传到 IMAP 草稿文件夹。这允许使用不能直接读取邮箱文件的邮件客户端发送补丁,就像发送其他电子邮件一样。该命令也适用于任何包含 FromDateSubject 字段(按此顺序)的通用邮箱。

典型用法如下:

$ git format-patch --signoff --stdout --attach origin | git imap-send

选项

-v
--verbose

显示详细信息。

-q
--quiet

安静模式。

-f <folder>
--folder=<folder>

指定要保存电子邮件的文件夹。例如: --folder=[Gmail]/Drafts-f INBOX/Drafts

--curl

使用 libcurl 与 IMAP 服务器通信,除非进行隧道连接。如果 Git 未启用 USE_CURL_FOR_IMAP_SEND 选项则忽略。

--no-curl

使用 Git 自带的 IMAP 例程与 IMAP 服务器通信,而不是使用 libcurl。如果 Git 启用了 NO_OPENSSL 选项则忽略。

--list

运行 IMAP LIST 命令以输出所有存在的文件夹列表。

配置

要使用此工具,必须设置 imap.folderimap.tunnelimap.host 为适当的值。

本节中此行以上的所有内容均未包含在 git-config[1] 文档中。以下内容与该文档中的内容相同

imap.folder

将邮件放入的文件夹,通常是草稿文件夹。例如: INBOX.DraftsINBOX/Drafts[Gmail]/Drafts。必须指定要交互的 IMAP 文件夹;当未提供 --folder 选项时,此配置变量的值将用作回退默认值。

imap.tunnel

用于通过隧道连接到 IMAP 服务器的命令,命令将通过该隧道进行管道传输,而不是直接网络连接到服务器。当未设置 imap.host 时需要。

imap.host

标识服务器的 URL。对非安全连接使用 imap:// 前缀,对安全连接使用 imaps:// 前缀。当设置 imap.tunnel 时忽略,否则必需。

imap.user

登录服务器时使用的用户名。

imap.pass

登录服务器时使用的密码。

imap.port

连接到服务器的整数端口号。对于 imap:// 主机默认为 143,对于 imaps:// 主机默认为 993。当设置 imap.tunnel 时忽略。

imap.sslverify

一个布尔值,用于启用/禁用 SSL/TLS 连接使用的服务器证书的验证。默认为 true。当设置 imap.tunnel 时忽略。

imap.preformattedHTML

一个布尔值,用于启用/禁用发送补丁时使用 HTML 编码。HTML 编码的补丁将用 <pre> 包围,并具有 text/html 的内容类型。讽刺的是,启用此选项会导致 Thunderbird 将补丁作为纯文本、format=fixed 的电子邮件发送。默认为 false

imap.authMethod

指定用于向 IMAP 服务器进行身份验证的身份验证方法。如果 Git 在编译时启用了 NO_CURL 选项,或者您的 curl 版本低于 7.34.0,或者您使用 --no-curl 选项运行 git-imap-send,则唯一支持的方法是 PLAINCRAM-MD5OAUTHBEARERXOAUTH2。如果未设置此项,则 git imap-send 使用基本的 IMAP 明文 LOGIN 命令。

获取可用文件夹列表

为了将电子邮件发送到特定文件夹,您需要知道收件箱中目标文件夹的正确名称。各种电子邮件客户端显示的“垃圾邮件”、“回收站”等名称不一定是您的电子邮件提供商的邮件服务器中存储的文件夹的实际名称。

为了获取与 git imap-send 一起使用的正确文件夹名称,您可以运行 git imap-send --list。这将显示有效文件夹名称的列表。在 Gmail 帐户上运行时,此类输出的示例如下:

* LIST (\HasNoChildren) "/" "INBOX"
* LIST (\HasChildren \Noselect) "/" "[Gmail]"
* LIST (\All \HasNoChildren) "/" "[Gmail]/All Mail"
* LIST (\Drafts \HasNoChildren) "/" "[Gmail]/Drafts"
* LIST (\HasNoChildren \Important) "/" "[Gmail]/Important"
* LIST (\HasNoChildren \Sent) "/" "[Gmail]/Sent Mail"
* LIST (\HasNoChildren \Junk) "/" "[Gmail]/Spam"
* LIST (\Flagged \HasNoChildren) "/" "[Gmail]/Starred"
* LIST (\HasNoChildren \Trash) "/" "[Gmail]/Trash"

在此,您可以观察到“垃圾邮件”文件夹的正确名称是 [Gmail]/Spam,而“回收站”文件夹的正确名称是 [Gmail]/Trash。可以使用类似的逻辑来确定其他文件夹。

示例

使用隧道模式

[imap]
    folder = "INBOX.Drafts"
    tunnel = "ssh -q -C user@example.com /usr/bin/imapd ./Maildir 2> /dev/null"

使用直接模式

[imap]
    folder = "INBOX.Drafts"
    host = imap://imap.example.com
    user = bob
    pass = p4ssw0rd

使用带 SSL 的直接模式

[imap]
    folder = "INBOX.Drafts"
    host = imaps://imap.example.com
    user = bob
    pass = p4ssw0rd
    port = 123
    ; sslVerify = false
注意
如果您怀疑连接问题的原因是您正在尝试设置(或已设置)的私有服务器 example.com 上使用的证书未正确验证,则在进行故障排除时,您可能需要使用 sslVerify=false

使用 Gmail 的 IMAP 接口

[imap]
    folder = "[Gmail]/Drafts"
    host = imaps://imap.gmail.com
    user = user@gmail.com
    port = 993

Gmail 不允许将您的常规密码用于 git imap-send。如果您在 Gmail 帐户上设置了多重身份验证,则可以生成一个特定于应用的密码供 git imap-send 使用。请访问 https://security.google.com/settings/security/apppasswords 来创建它。或者,按照下面的说明使用 OAuth2.0 身份验证。

注意
如果收到“文件夹不存在”的错误,您可能需要使用: folder = "[Google Mail]/Drafts"。您也可以运行 git imap-send --list 来获取可用文件夹的列表。
注意
如果您的 Gmail 帐户设置为除英语以外的其他语言,则“草稿”文件夹的名称将是本地化的。

如果您想使用基于 OAuth2.0 的身份验证,可以在配置文件中指定 OAUTHBEARERXOAUTH2 机制。它比使用特定于应用的密码更安全,并且不需要多重身份验证。在使用此身份验证时,您必须在密码处使用 OAuth2.0 访问令牌。

[imap]
    folder = "[Gmail]/Drafts"
    host = imaps://imap.gmail.com
    user = user@gmail.com
    port = 993
    authmethod = OAUTHBEARER

使用 Outlook 的 IMAP 接口

与 Gmail 不同,Outlook 只支持基于 OAuth2.0 的身份验证。此外,它只支持 XOAUTH2 作为机制。

[imap]
    folder = "Drafts"
    host = imaps://outlook.office365.com
    user = user@outlook.com
    port = 993
    authmethod = XOAUTH2

一旦提交准备好发送,请运行以下命令:

$ git format-patch --cover-letter -M --stdout origin/master | git imap-send

只需确保在电子邮件客户端中禁用行换行(Gmail 的网页界面无论如何都会换行,所以您需要使用真正的 IMAP 客户端)。

如果您使用 OAuth2.0 身份验证,使用凭据助手生成令牌会更方便。可以在 git-send-email[1] 中建议的凭据助手也可以用于 git imap-send

注意

您仍然有责任确保您的电子邮件程序发送的邮件消息符合您项目的标准。许多项目不喜欢将补丁作为附件发送。一些邮件代理会以可能导致补丁失败的方式转换补丁(例如,换行,将其作为 format=flowed 发送)。如果您不检查这一点,您会收到愤怒的指责。

特别是 Thunderbird 是出了名的有问题。Thunderbird 用户可以访问此网页了解更多信息: https://kb.mozillazine.org/Plain_text_e-mail_-_Thunderbird#Completely_plain_email

另请参阅

GIT

Git[1] 套件的一部分