传入的电子邮件
GitLab有几个基于接收传入电子邮件的功能:
- 回复电子邮件:允许GitLab用户通过回复通知邮件来评论问题和合并请求。
- 新一期电邮:允许GitLab用户通过发送电子邮件到用户特定的电子邮件地址来创建一个新问题。
- 新的合并请求通过电子邮件:允许GitLab用户通过发送电子邮件到用户特定的电子邮件地址来创建一个新的合并请求。
需求
处理收到的电子邮件需要一个IMAP启用的电子邮件帐户。GitLab需要以下三种策略之一:
- 电子邮件sub-addressing
- 专用电子邮件地址
- 所有的邮箱
让我们逐一看看这些选项。
如果您的供应商或服务器支持电子邮件子寻址,我们建议使用它。大多数功能(除了通过电子邮件回复)只适用于子寻址。
电子邮件sub-addressing
Sub-addressing是一个功能,任何电子邮件到用户+ some_arbitrary_tag@example.com
最终会在邮箱里user@example.com
,并得到Gmail,谷歌Apps, Yahoo!Mail, Outlook.com和iCloud,还有邮政邮件服务器你可以在本地运行。
专用电子邮件地址
这个解决方案设置起来非常简单:你只需要创建一个专门用于接收用户对GitLab通知的回复的电子邮件地址。
所有的邮箱
一个所有的邮箱因为一个域将“捕获所有”邮件服务器中不存在的地址到该域的电子邮件。
GitLab可以设置为允许用户对问题进行评论,并通过回复通知邮件来合并请求。
设置好
如果你想使用Gmail /谷歌应用程序来接收电子邮件,请确保你有启用IMAP访问而且允许不太安全的应用程序访问帐户或开启两步验证和使用应用程序密码.
要在Ubuntu上设置具有IMAP访问的基本Postfix邮件服务器,请遵循后缀设置文档.
安全问题
警告:在选择用于接收传入电子邮件的域时要小心。
举例来说,假设您的顶级公司域名为hooli.com
.你公司的所有员工都有一个通过谷歌应用程序在该域名的电子邮件地址,你公司的私人Slack实例需要一个有效的@hooli.com
电子邮件地址,以便报名。
如果您还在上托管一个面向公众的GitLab实例hooli.com
并将您的接收电子邮件域设置为hooli.com
,攻击者可能滥用“通过电子邮件创建新问题”或“通过电子邮件创建新的合并请求的功能,在注册Slack时使用项目的唯一地址作为电子邮件,这将发送一封确认电子邮件,这将在攻击者拥有的项目上创建一个新的问题或合并请求,允许他们单击确认链接,并在你公司的私人Slack实例上验证他们的帐户。
我们建议在子域上接收传入的电子邮件,例如incoming.hooli.com
,并确保您没有使用任何仅基于访问电子邮件域的身份验证服务,例如* .hooli.com。
或者,使用专用的域名进行GitLab电子邮件通信,例如hooli-gitlab.com
.
参见GitLab问题# 30366关于此漏洞的真实例子。
综合包安装
找到
incoming_email
部分/etc/gitlab/gitlab.rb
,启用该功能,并填写您的IMAP服务器和电子邮件帐户的详细信息:Postfix邮件服务器的配置,假设邮箱为incoming@gitlab.example.com
gitlab_rails[“incoming_email_enabled”]=真正的#包含' %{key} '占位符的电子邮件地址,该占位符将被替换以引用被回复的项目。占位符可以省略,但如果存在,它必须出现在地址的“user”部分(在“@”之前)。gitlab_rails[“incoming_email_address”]=“输入+ %{关键}@gitlab.example.com”#电子邮件帐户用户名对于第三方提供商,这通常是完整的电子邮件地址。#对于自托管的电子邮件服务器,这通常是电子邮件地址的用户部分。gitlab_rails[“incoming_email_email”]=“输入”#邮箱密码gitlab_rails[“incoming_email_password”]=“修订”# IMAP服务器主机gitlab_rails[“incoming_email_host”]=“gitlab.example.com”# IMAP服务器端口gitlab_rails[“incoming_email_port”]=143# IMAP服务器是否使用SSLgitlab_rails[“incoming_email_ssl”]=假# IMAP服务器是否使用StartTLSgitlab_rails[“incoming_email_start_tls”]=假#接收来的邮件将被放入的邮箱。通常“收件箱”。gitlab_rails[“incoming_email_mailbox_name”]=“收件箱”# IDLE命令超时。gitlab_rails[“incoming_email_idle_timeout”]=60
Gmail /谷歌应用程序的配置,假设邮箱为gitlab-incoming@gmail.com
gitlab_rails[“incoming_email_enabled”]=真正的#包含' %{key} '占位符的电子邮件地址,该占位符将被替换以引用被回复的项目。占位符可以省略,但如果存在,它必须出现在地址的“user”部分(在“@”之前)。gitlab_rails[“incoming_email_address”]=“gitlab-incoming + %{关键}@gmail.com”#电子邮件帐户用户名对于第三方提供商,这通常是完整的电子邮件地址。#对于自托管的电子邮件服务器,这通常是电子邮件地址的用户部分。gitlab_rails[“incoming_email_email”]=“gitlab-incoming@gmail.com”#邮箱密码gitlab_rails[“incoming_email_password”]=“修订”# IMAP服务器主机gitlab_rails[“incoming_email_host”]=“imap.gmail.com”# IMAP服务器端口gitlab_rails[“incoming_email_port”]=993# IMAP服务器是否使用SSLgitlab_rails[“incoming_email_ssl”]=真正的# IMAP服务器是否使用StartTLSgitlab_rails[“incoming_email_start_tls”]=假#接收来的邮件将被放入的邮箱。通常“收件箱”。gitlab_rails[“incoming_email_mailbox_name”]=“收件箱”# IDLE命令超时。gitlab_rails[“incoming_email_idle_timeout”]=60
配置启用了IMAP的Microsoft Exchange邮件服务器,假设邮箱为incoming@exchange.example.com
gitlab_rails[“incoming_email_enabled”]=真正的#电子邮件地址回复被发送到- Exchange不支持子寻址,因此%{key}不在这里使用gitlab_rails[“incoming_email_address”]=“incoming@exchange.example.com”#电子邮件帐户用户名#通常是userPrincipalName (UPN)gitlab_rails[“incoming_email_email”]=“incoming@ad-domain.example.com”#邮箱密码gitlab_rails[“incoming_email_password”]=“修订”# IMAP服务器主机gitlab_rails[“incoming_email_host”]=“exchange.example.com”# IMAP服务器端口gitlab_rails[“incoming_email_port”]=993# IMAP服务器是否使用SSLgitlab_rails[“incoming_email_ssl”]=真正的
重新配置GitLab以使更改生效:
sudogitlab-ctl重新配置sudogitlab-ctl重启
验证所有配置是否正确:
sudogitlab-rake gitlab: incoming_email:检查
通过电子邮件回复现在应该可以工作了。
从源安装
进入GitLab安装目录:
cd/home/git/gitlab
找到
incoming_email
部分配置/ gitlab.yml
,启用该功能,并填写您的IMAP服务器和电子邮件帐户的详细信息:sudo编辑配置/ gitlab.yml
Postfix邮件服务器的配置,假设邮箱为incoming@gitlab.example.com
incoming_email:启用:真正的#包含' %{key} '占位符的电子邮件地址,该占位符将被替换以引用被回复的项目。占位符可以省略,但如果存在,它必须出现在地址的“user”部分(在“@”之前)。地址:"传入+ %{关键}@gitlab.example.com”#电子邮件帐户用户名对于第三方提供商,这通常是完整的电子邮件地址。#对于自托管的电子邮件服务器,这通常是电子邮件地址的用户部分。用户:"传入的“#邮箱密码密码:"(修订)”# IMAP服务器主机宿主:"gitlab.example.com”# IMAP服务器端口港口:143# IMAP服务器是否使用SSLssl:假# IMAP服务器是否使用StartTLSstart_tls:假#接收来的邮件将被放入的邮箱。通常“收件箱”。邮箱:"收件箱”# IDLE命令超时。idle_timeout:60
Gmail /谷歌应用程序的配置,假设邮箱为gitlab-incoming@gmail.com
incoming_email:启用:真正的#包含' %{key} '占位符的电子邮件地址,该占位符将被替换以引用被回复的项目。占位符可以省略,但如果存在,它必须出现在地址的“user”部分(在“@”之前)。地址:"gitlab-incoming + %{关键}@gmail.com”#电子邮件帐户用户名对于第三方提供商,这通常是完整的电子邮件地址。#对于自托管的电子邮件服务器,这通常是电子邮件地址的用户部分。用户:"gitlab-incoming@gmail.com”#邮箱密码密码:"(修订)”# IMAP服务器主机宿主:"imap.gmail.com”# IMAP服务器端口港口:993# IMAP服务器是否使用SSLssl:真正的# IMAP服务器是否使用StartTLSstart_tls:假#接收来的邮件将被放入的邮箱。通常“收件箱”。邮箱:"收件箱”# IDLE命令超时。idle_timeout:60
配置启用了IMAP的Microsoft Exchange邮件服务器,假设邮箱为incoming@exchange.example.com
incoming_email:启用:真正的#电子邮件地址回复被发送到- Exchange不支持子寻址,因此%{key}不在这里使用地址:"incoming@exchange.example.com”#电子邮件帐户用户名#通常是userPrincipalName (UPN)用户:"incoming@ad-domain.example.com”#邮箱密码密码:"(修订)”# IMAP服务器主机宿主:"exchange.example.com”# IMAP服务器端口港口:993# IMAP服务器是否使用SSLssl:真正的# IMAP服务器是否使用StartTLSstart_tls:假#接收来的邮件将被放入的邮箱。通常“收件箱”。邮箱:"收件箱”# IDLE命令超时。idle_timeout:60
启用
mail_room
在初始化脚本at/etc/default/gitlab
:sudo mkdir- p/etc/default回声“mail_room_enabled = true”|sudo三通——一个/etc/default/gitlab
重启GitLab:
sudo服务gitlab重启
验证所有配置是否正确:
sudo- ugit- h包执行rake gitlab: incoming_email:检查RAILS_ENV=生产
通过电子邮件回复现在应该可以工作了。