受信メール
GitLabには受信メールに基づくいくつかの機能があります:
- メールで返信:GitLabユーザーが通知メールに返信することで、イシューやマージリクエストにコメントできるようになります。
- メールによる新規イシュー: GitLabユーザーがユーザー固有のメールアドレスにメールを送信することで、新規イシューを作成できるようにします。
- メールによる新しいマージリクエスト: GitLabユーザーがユーザー指定のメールアドレスにメールを送信することで、新しいマージリクエストを作成できます。
- サービスデスク:GitLabを通じて顧客にメールサポートを提供します。
要件
GitLabインスタンス宛のメッセージのみを受信できるメールアドレスの使用をお勧めします。GitLab用でない受信メールは拒否通知を受け取ります。
受信メールを処理するには、IMAP対応のメールアカウントが必要です。GitLabは以下の3つのストラテジーのいずれかを必要とします:
- 電子メールのサブアドレス(推奨)
- キャッチオールメールボックス
- 専用メールアドレス(メールでの返信のみ対応)
それぞれのオプションについて説明します。
電子メールのサブアドレス
サブアドレスは、user+arbitrary_tag@example.com
宛のメールがuser@example.com
のメールボックスに届くメールサーバーの機能です。Gmail、Googleアプリ、Yahoo!メール、Outlook.com、iCloudなどのプロバイダーや、オンプレミスで実行できるPostfixメールサーバーでサポートされています。Microsoft Exchange Server はサブアドレスをサポートしておらず、Microsoft Office 365 もデフォルトではサブアドレスをサポートしていません。
キャッチオールメールボックス
ドメイン用のキャッチオールメールボックスは、メールサーバー上に存在するどのアドレスにも一致しないドメイン宛のすべてのメールメッセージを受信します。
GitLab 11.7では、キャッチオールメールボックスはメールサブアドレスと同じ機能をサポートしていますが、メールサブアドレスは引き続き推奨しています。
専用メールアドレス
このソリューションを設定するには、GitLab通知に対するユーザーの返信を受け取るための専用メールアドレスを作成する必要があります。しかし、この方法は返信のみをサポートし、受信メールの他の機能はサポートしません。
受け取れるヘッダ
GitLab 14.9 で導入された
Received
ヘッダを受け入れます。
設定されたメールアドレスが以下のヘッダのいずれかに存在する場合、メールは正しく処理されます(チェックされた順にソートされます):
To
Delivered-To
-
Envelope-To
またはX-Envelope-To
Received
References
ヘッダも受け付けられますが、これは特に電子メールの応答を既存のディスカッションスレッドに関連付けるために使用されます。メールによるイシューの作成には使用されません。
GitLab 14.6以降では、サービスデスクは受け入れられたヘッダもチェックします。
通常、”To “フィールドには主な受信者のメールアドレスが含まれます。しかし、以下の場合、設定されたGitLabのメールアドレスが含まれないことがあります:
- アドレスが “CC” フィールドに入っている場合。
- すべて返信」の場合、アドレスが含まれています。
- メールは転送されました。
Received
ヘッダーには複数のメールアドレスを含めることができます。これらは表示された順にチェックされます。最初に一致したものが使用されます。
拒否されたヘッダ
自動メールシステムからの不要なイシュー作成を防ぐため、GitLabは以下のヘッダーを含むすべての受信メールを無視します:
-
Auto-Submitted
を含むメールを無視します。no
-
X-Autoreply
以外の値でyes
設定
受信メールにGmail / Google Appsを使用する場合は、IMAPアクセスを有効にし、セキュリティの低いアプリがアカウントにアクセスできるようにするか、2段階認証をオンにして アプリのパスワードを使用するようにしてください。
Office 365を使用し、二要素認証が有効になっている場合は、メールボックスの通常のパスワードの代わりにアプリのパスワードを使用していることを確認してください。
UbuntuでIMAPアクセス付きの基本的なPostfixメールサーバーをセットアップするには、Postfixセットアップドキュメントに従ってください。
セキュリティ
たとえば、会社のトップレベルドメインがhooli.com
だとします。社内の全従業員がGoogle Apps経由でこのドメインのメールアドレスを持っており、社内の非公開Slackインスタンスに登録するには有効な@hooli.com
メールアドレスが必要です。
で公開GitLabインスタンスもhooli.com
ホストしていて、受信メールのドメインを , に設定して hooli.com
いる場合、攻撃者はSlackにサインアップするときのメールとしてプロジェクト固有のアドレスを使うことで、”Create new issue by email” や“Create new merge request by email” 機能を悪用することができます。この場合、確認メールが送信され、攻撃者が所有するプロジェクトに新しいイシューまたはマージリクエストが作成され、攻撃者は確認リンクを選択し、御社の非公開Slackインスタンスでアカウントを検証することができます。
incoming.hooli.com
のようなサブドメインで受信メールを受け取り、*.hooli.com.
のようなメールドメインへのアクセスのみに基づいて認証するようなサービスを採用しないようにすることをお勧めします。あるいは、hooli-gitlab.com
のような GitLab のメール通信専用のドメインを使用します。
このエクスプロイトの実例については、GitLabイシュー#30366を参照してください。
FROM
アドレスに配信され、メールサーバーの IP やドメインがブロックリストに表示される可能性があります。Linux パッケージのインストール
-
/etc/gitlab/gitlab.rb
のincoming_email
セクションを見つけ、機能を有効にし、特定の IMAP サーバーとメールアカウントの詳細を記入してください(以下の例を参照)。 -
変更を有効にするために GitLab を再設定します:
sudo gitlab-ctl reconfigure # Needed when enabling or disabling for the first time but not for password changes. # See https://gitlab.com/gitlab-org/gitlab-foss/-/issues/23560#note_61966788 sudo gitlab-ctl restart
-
すべてが正しく設定されていることを確認します:
sudo gitlab-rake gitlab:incoming_email:check
これでメールでの返信が機能するはずです。
セルフコンパイルによるインストール
-
GitLabのインストールディレクトリに移動します:
cd /home/git/gitlab
-
gitlab-mail_room
gem を手動でインストールします:gem install gitlab-mail_room
スレッドデッドロックを回避し、MailRoomの最新機能をサポートするためにこのステップが必要です。詳しくはこちらの説明をご覧ください。 -
config/gitlab.yml
のincoming_email
セクションを見つけ、機能を有効にし、特定の IMAP サーバーとメールアカウントの詳細を記入してください(以下の例を参照)。
systemdユニットを使ってGitLabを管理する場合:
-
gitlab.target
にgitlab-mailroom.service
を依存関係として追加します:sudo systemctl edit gitlab.target
開いたエディターで以下を追加し、ファイルを保存します:
[Unit] Wants=gitlab-mailroom.service
-
RedisとPostgreSQLを同じマシンで実行する場合は、Redisの依存関係を追加してください。実行します:
sudo systemctl edit gitlab-mailroom.service
開いたエディターで以下を追加し、ファイルを保存します:
[Unit] Wants=redis-server.service After=redis-server.service
-
開始
gitlab-mailroom.service
:sudo systemctl start gitlab-mailroom.service
-
すべてが正しく設定されていることを確認します:
sudo -u git -H bundle exec rake gitlab:incoming_email:check RAILS_ENV=production
SysVのinitスクリプトを使ってGitLabを管理している場合:
-
/etc/default/gitlab
の init スクリプトでmail_room
を有効にしてください:sudo mkdir -p /etc/default echo 'mail_room_enabled=true' | sudo tee -a /etc/default/gitlab
-
GitLabを再起動します:
sudo service gitlab restart
-
すべてが正しく設定されていることを確認します:
sudo -u git -H bundle exec rake gitlab:incoming_email:check RAILS_ENV=production
これでメールでの返信が機能するはずです。
設定例
ポストフィックス
Postfix メールサーバの設定例です。メールボックスincoming@gitlab.example.com
を想定しています。
Linuxパッケージインストールの例:
gitlab_rails['incoming_email_enabled'] = true
# The email address including the %{key} placeholder that will be replaced to reference the
# item being replied to. This %{key} should be included in its entirety within the email
# address and not replaced by another value.
# For example: emailaddress+%{key}@gitlab.example.com.
# The placeholder must appear in the "user" part of the address (before the `@`).
gitlab_rails['incoming_email_address'] = "incoming+%{key}@gitlab.example.com"
# Email account username
# With third party providers, this is usually the full email address.
# With self-hosted email servers, this is usually the user part of the email address.
gitlab_rails['incoming_email_email'] = "incoming"
# Email account password
gitlab_rails['incoming_email_password'] = "[REDACTED]"
# IMAP server host
gitlab_rails['incoming_email_host'] = "gitlab.example.com"
# IMAP server port
gitlab_rails['incoming_email_port'] = 143
# Whether the IMAP server uses SSL
gitlab_rails['incoming_email_ssl'] = false
# Whether the IMAP server uses StartTLS
gitlab_rails['incoming_email_start_tls'] = false
# The mailbox where incoming mail will end up. Usually "inbox".
gitlab_rails['incoming_email_mailbox_name'] = "inbox"
# The IDLE command timeout.
gitlab_rails['incoming_email_idle_timeout'] = 60
# If you are using Microsoft Graph instead of IMAP, set this to false to retain
# messages in the inbox because deleted messages are auto-expunged after some time.
gitlab_rails['incoming_email_delete_after_delivery'] = true
# Whether to expunge (permanently remove) messages from the mailbox when they are marked as deleted after delivery
# Only applies to IMAP. Microsoft Graph will auto-expunge any deleted messages.
gitlab_rails['incoming_email_expunge_deleted'] = true
セルフコンパイルインストールの例:
incoming_email:
enabled: true
# The email address including the %{key} placeholder that will be replaced to reference the
# item being replied to. This %{key} should be included in its entirety within the email
# address and not replaced by another value.
# For example: emailaddress+%{key}@gitlab.example.com.
# The placeholder must appear in the "user" part of the address (before the `@`).
address: "incoming+%{key}@gitlab.example.com"
# Email account username
# With third party providers, this is usually the full email address.
# With self-hosted email servers, this is usually the user part of the email address.
user: "incoming"
# Email account password
password: "[REDACTED]"
# IMAP server host
host: "gitlab.example.com"
# IMAP server port
port: 143
# Whether the IMAP server uses SSL
ssl: false
# Whether the IMAP server uses StartTLS
start_tls: false
# The mailbox where incoming mail will end up. Usually "inbox".
mailbox: "inbox"
# The IDLE command timeout.
idle_timeout: 60
# If you are using Microsoft Graph instead of IMAP, set this to false to retain
# messages in the inbox because deleted messages are auto-expunged after some time.
delete_after_delivery: true
# Whether to expunge (permanently remove) messages from the mailbox when they are marked as deleted after delivery
# Only applies to IMAP. Microsoft Graph will auto-expunge any deleted messages.
expunge_deleted: true
Gmail
Gmail/Google Workspaceの設定例。メールボックスgitlab-incoming@gmail.com
を想定しています。
incoming_email_email
をGmailエイリアスアカウントにすることはできません。Linuxパッケージインストールの例:
gitlab_rails['incoming_email_enabled'] = true
# The email address including the %{key} placeholder that will be replaced to reference the
# item being replied to. This %{key} should be included in its entirety within the email
# address and not replaced by another value.
# For example: emailaddress+%{key}@gmail.com.
# The placeholder must appear in the "user" part of the address (before the `@`).
gitlab_rails['incoming_email_address'] = "gitlab-incoming+%{key}@gmail.com"
# Email account username
# With third party providers, this is usually the full email address.
# With self-hosted email servers, this is usually the user part of the email address.
gitlab_rails['incoming_email_email'] = "gitlab-incoming@gmail.com"
# Email account password
gitlab_rails['incoming_email_password'] = "[REDACTED]"
# IMAP server host
gitlab_rails['incoming_email_host'] = "imap.gmail.com"
# IMAP server port
gitlab_rails['incoming_email_port'] = 993
# Whether the IMAP server uses SSL
gitlab_rails['incoming_email_ssl'] = true
# Whether the IMAP server uses StartTLS
gitlab_rails['incoming_email_start_tls'] = false
# The mailbox where incoming mail will end up. Usually "inbox".
gitlab_rails['incoming_email_mailbox_name'] = "inbox"
# The IDLE command timeout.
gitlab_rails['incoming_email_idle_timeout'] = 60
# If you are using Microsoft Graph instead of IMAP, set this to false if you want to retain
# messages in the inbox because deleted messages are auto-expunged after some time.
gitlab_rails['incoming_email_delete_after_delivery'] = true
# Whether to expunge (permanently remove) messages from the mailbox when they are marked as deleted after delivery
# Only applies to IMAP. Microsoft Graph will auto-expunge any deleted messages.
gitlab_rails['incoming_email_expunge_deleted'] = true
セルフコンパイルインストールの例:
incoming_email:
enabled: true
# The email address including the %{key} placeholder that will be replaced to reference the
# item being replied to. This %{key} should be included in its entirety within the email
# address and not replaced by another value.
# For example: emailaddress+%{key}@gmail.com.
# The placeholder must appear in the "user" part of the address (before the `@`).
address: "gitlab-incoming+%{key}@gmail.com"
# Email account username
# With third party providers, this is usually the full email address.
# With self-hosted email servers, this is usually the user part of the email address.
user: "gitlab-incoming@gmail.com"
# Email account password
password: "[REDACTED]"
# IMAP server host
host: "imap.gmail.com"
# IMAP server port
port: 993
# Whether the IMAP server uses SSL
ssl: true
# Whether the IMAP server uses StartTLS
start_tls: false
# The mailbox where incoming mail will end up. Usually "inbox".
mailbox: "inbox"
# The IDLE command timeout.
idle_timeout: 60
# If you are using Microsoft Graph instead of IMAP, set this to falseto retain
# messages in the inbox because deleted messages are auto-expunged after some time.
delete_after_delivery: true
# Whether to expunge (permanently remove) messages from the mailbox when they are marked as deleted after delivery
# Only applies to IMAP. Microsoft Graph will auto-expunge any deleted messages.
expunge_deleted: true
Microsoft Exchange Server
Microsoft Exchange Server で IMAP を有効にした場合の設定例です。Exchange はサブアドレスをサポートしていないため、2 つのオプションしかありません:
- キャッチオール・メールボックス(Exchange 専用を推奨)
- 専用メールアドレス(メールでの返信のみ対応)
キャッチオールメールボックス
キャッチオールメールボックスincoming@exchange.example.com
を想定しています。
Linuxパッケージインストールの例:
gitlab_rails['incoming_email_enabled'] = true
# The email address including the %{key} placeholder that will be replaced to reference the
# item being replied to. This %{key} should be included in its entirety within the email
# address and not replaced by another value.
# For example: emailaddress-%{key}@exchange.example.com.
# The placeholder must appear in the "user" part of the address (before the `@`).
# Exchange does not support sub-addressing, so a catch-all mailbox must be used.
gitlab_rails['incoming_email_address'] = "incoming-%{key}@exchange.example.com"
# Email account username
# Typically this is the userPrincipalName (UPN)
gitlab_rails['incoming_email_email'] = "incoming@ad-domain.example.com"
# Email account password
gitlab_rails['incoming_email_password'] = "[REDACTED]"
# IMAP server host
gitlab_rails['incoming_email_host'] = "exchange.example.com"
# IMAP server port
gitlab_rails['incoming_email_port'] = 993
# Whether the IMAP server uses SSL
gitlab_rails['incoming_email_ssl'] = true
# Whether to expunge (permanently remove) messages from the mailbox when they are marked as deleted after delivery
# Only applies to IMAP. Microsoft Graph will auto-expunge any deleted messages.
gitlab_rails['incoming_email_expunge_deleted'] = true
セルフコンパイルインストールの例:
incoming_email:
enabled: true
# The email address including the %{key} placeholder that will be replaced to reference the
# item being replied to. This %{key} should be included in its entirety within the email
# address and not replaced by another value.
# For example: emailaddress-%{key}@exchange.example.com.
# The placeholder must appear in the "user" part of the address (before the `@`).
# Exchange does not support sub-addressing, so a catch-all mailbox must be used.
address: "incoming-%{key}@exchange.example.com"
# Email account username
# Typically this is the userPrincipalName (UPN)
user: "incoming@ad-domain.example.com"
# Email account password
password: "[REDACTED]"
# IMAP server host
host: "exchange.example.com"
# IMAP server port
port: 993
# Whether the IMAP server uses SSL
ssl: true
# If you are using Microsoft Graph instead of IMAP, set this to false to retain
# messages in the inbox since deleted messages are auto-expunged after some time.
delete_after_delivery: true
# Whether to expunge (permanently remove) messages from the mailbox when they are marked as deleted after delivery
expunge_deleted: true
専用メールアドレス
専用メールアドレスincoming@exchange.example.com
を想定しています。
Linuxパッケージインストールの例:
gitlab_rails['incoming_email_enabled'] = true
# Exchange does not support sub-addressing, and we're not using a catch-all mailbox so %{key} is not used here
gitlab_rails['incoming_email_address'] = "incoming@exchange.example.com"
# Email account username
# Typically this is the userPrincipalName (UPN)
gitlab_rails['incoming_email_email'] = "incoming@ad-domain.example.com"
# Email account password
gitlab_rails['incoming_email_password'] = "[REDACTED]"
# IMAP server host
gitlab_rails['incoming_email_host'] = "exchange.example.com"
# IMAP server port
gitlab_rails['incoming_email_port'] = 993
# Whether the IMAP server uses SSL
gitlab_rails['incoming_email_ssl'] = true
# Whether to expunge (permanently remove) messages from the mailbox when they are marked as deleted after delivery
gitlab_rails['incoming_email_expunge_deleted'] = true
セルフコンパイルインストールの例:
incoming_email:
enabled: true
# Exchange does not support sub-addressing,
# and we're not using a catch-all mailbox so %{key} is not used here
address: "incoming@exchange.example.com"
# Email account username
# Typically this is the userPrincipalName (UPN)
user: "incoming@ad-domain.example.com"
# Email account password
password: "[REDACTED]"
# IMAP server host
host: "exchange.example.com"
# IMAP server port
port: 993
# Whether the IMAP server uses SSL
ssl: true
# If you are using Microsoft Graph instead of IMAP, set this to false to retain
# messages in the inbox since deleted messages are auto-expunged after some time.
delete_after_delivery: true
# Whether to expunge (permanently remove) messages from the mailbox when they are marked as deleted after delivery
expunge_deleted: true
Microsoft Office 365
IMAPを有効にしたMicrosoft Office 365の設定例です。
サブアドレスメールボックス
この一連のPowerShellコマンドは、Office 365の組織レベルでサブアドレスを有効にします。これにより、組織内のすべてのメールボックスがサブアドレス付きメールを受信できるようになります。
サブアドレスを有効にするには
-
PowerShell ギャラリーから
ExchangeOnlineManagement
モジュールをダウンロードしてインストールします。 -
PowerShellで、以下のコマンドを実行します:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser Import-Module ExchangeOnlineManagement Connect-ExchangeOnline Set-OrganizationConfig -AllowPlusAddressInRecipients $true Disconnect-ExchangeOnline
この Linux パッケージ・インストールの例では、メールボックスincoming@office365.example.com
を想定しています:
gitlab_rails['incoming_email_enabled'] = true
# The email address including the %{key} placeholder that will be replaced to reference the
# item being replied to. This %{key} should be included in its entirety within the email
# address and not replaced by another value.
# For example: emailaddress+%{key}@office365.example.com.
# The placeholder must appear in the "user" part of the address (before the `@`).
gitlab_rails['incoming_email_address'] = "incoming+%{key}@office365.example.com"
# Email account username
# Typically this is the userPrincipalName (UPN)
gitlab_rails['incoming_email_email'] = "incoming@office365.example.com"
# Email account password
gitlab_rails['incoming_email_password'] = "[REDACTED]"
# IMAP server host
gitlab_rails['incoming_email_host'] = "outlook.office365.com"
# IMAP server port
gitlab_rails['incoming_email_port'] = 993
# Whether the IMAP server uses SSL
gitlab_rails['incoming_email_ssl'] = true
# Whether to expunge (permanently remove) messages from the mailbox when they are marked as deleted after delivery
gitlab_rails['incoming_email_expunge_deleted'] = true
セルフコンパイルインストール用のこの例は、メールボックスincoming@office365.example.com
を想定しています:
incoming_email:
enabled: true
# The email address including the %{key} placeholder that will be replaced to reference the
# item being replied to. This %{key} should be included in its entirety within the email
# address and not replaced by another value.
# For example: emailaddress+%{key}@office365.example.com.
# The placeholder must appear in the "user" part of the address (before the `@`).
address: "incoming+%{key}@office365.example.comm"
# Email account username
# Typically this is the userPrincipalName (UPN)
user: "incoming@office365.example.comm"
# Email account password
password: "[REDACTED]"
# IMAP server host
host: "outlook.office365.com"
# IMAP server port
port: 993
# Whether the IMAP server uses SSL
ssl: true
# Whether to expunge (permanently remove) messages from the mailbox when they are marked as deleted after delivery
expunge_deleted: true
キャッチオールメールボックス
Linux パッケージインストール用のこの例は、キャッチオールメールボックスincoming@office365.example.com
を想定しています:
gitlab_rails['incoming_email_enabled'] = true
# The email address including the %{key} placeholder that will be replaced to reference the
# item being replied to. This %{key} should be included in its entirety within the email
# address and not replaced by another value.
# For example: emailaddress-%{key}@office365.example.com.
# The placeholder must appear in the "user" part of the address (before the `@`).
gitlab_rails['incoming_email_address'] = "incoming-%{key}@office365.example.com"
# Email account username
# Typically this is the userPrincipalName (UPN)
gitlab_rails['incoming_email_email'] = "incoming@office365.example.com"
# Email account password
gitlab_rails['incoming_email_password'] = "[REDACTED]"
# IMAP server host
gitlab_rails['incoming_email_host'] = "outlook.office365.com"
# IMAP server port
gitlab_rails['incoming_email_port'] = 993
# Whether the IMAP server uses SSL
gitlab_rails['incoming_email_ssl'] = true
# Whether to expunge (permanently remove) messages from the mailbox when they are marked as deleted after delivery
gitlab_rails['incoming_email_expunge_deleted'] = true
セルフコンパイルインストール用のこの例は、キャッチオールメールボックスincoming@office365.example.com
を想定しています:
incoming_email:
enabled: true
# The email address including the %{key} placeholder that will be replaced to reference the
# item being replied to. This %{key} should be included in its entirety within the email
# address and not replaced by another value.
# For example: emailaddress+%{key}@office365.example.com.
# The placeholder must appear in the "user" part of the address (before the `@`).
address: "incoming-%{key}@office365.example.com"
# Email account username
# Typically this is the userPrincipalName (UPN)
user: "incoming@ad-domain.example.com"
# Email account password
password: "[REDACTED]"
# IMAP server host
host: "outlook.office365.com"
# IMAP server port
port: 993
# Whether the IMAP server uses SSL
ssl: true
# Whether to expunge (permanently remove) messages from the mailbox when they are marked as deleted after delivery
expunge_deleted: true
専用メールアドレス
Linux パッケージインストール用のこの例では、専用の電子メールアドレスincoming@office365.example.com
を想定しています:
gitlab_rails['incoming_email_enabled'] = true
gitlab_rails['incoming_email_address'] = "incoming@office365.example.com"
# Email account username
# Typically this is the userPrincipalName (UPN)
gitlab_rails['incoming_email_email'] = "incoming@office365.example.com"
# Email account password
gitlab_rails['incoming_email_password'] = "[REDACTED]"
# IMAP server host
gitlab_rails['incoming_email_host'] = "outlook.office365.com"
# IMAP server port
gitlab_rails['incoming_email_port'] = 993
# Whether the IMAP server uses SSL
gitlab_rails['incoming_email_ssl'] = true
# Whether to expunge (permanently remove) messages from the mailbox when they are marked as deleted after delivery
gitlab_rails['incoming_email_expunge_deleted'] = true
セルフコンパイル・インストール用のこの例では、専用の電子メールアドレスincoming@office365.example.com
を想定しています:
incoming_email:
enabled: true
address: "incoming@office365.example.com"
# Email account username
# Typically this is the userPrincipalName (UPN)
user: "incoming@office365.example.com"
# Email account password
password: "[REDACTED]"
# IMAP server host
host: "outlook.office365.com"
# IMAP server port
port: 993
# Whether the IMAP server uses SSL
ssl: true
# Whether to expunge (permanently remove) messages from the mailbox when they are marked as deleted after delivery
expunge_deleted: true
Microsoft Graph
GitLab 13.11 で導入されました。
GitLabはIMAPの代わりにMicrosoft Graph APIを使って受信メールを読み込むことができます。MicrosoftはBasic認証によるIMAPの使用を廃止するため、新しいMicrosoft Exchange OnlineメールボックスにはMicrosoft Graph APIが必要です。
GitLab for Microsoft Graphを設定するには、Azure Active DirectoryにOAuth 2.0アプリケーションを登録し、すべてのメールボックスに対してMail.ReadWrite
の権限を与える必要があります。詳細については、MailRoomのステップバイステップガイドと Microsoftの説明を参照してください。
OAuth 2.0アプリケーションを設定する際に、以下を記録してください:
- Azure Active Directory のテナント ID。
- OAuth 2.0アプリケーションのクライアントID
- OAuth 2.0アプリケーションのクライアントシークレット
メールボックスへのアクセス制限
MailRoom をサービスアカウントとして動作させるには、Azure Active Directory で作成するアプリケーションで、すべてのメールボックスでメールの読み取り/書き込みを行うようにMail.ReadWrite
プロパティを設定する必要があります。
セキュリティ上の懸念を軽減するために、Microsoft のドキュメントに記載されているように、すべてのアカウントのメールボックスへのアクセスを制限するアプリケーションアクセスポリシーを設定することをお勧めします。
Linux パッケージインストール用のこの例では、以下のメールボックスを使用することを想定しています:incoming@example.onmicrosoft.com
:
Microsoft Graphの設定
GitLab 14.9で導入された代替Azureデプロイ。
gitlab_rails['incoming_email_enabled'] = true
# The email address including the %{key} placeholder that will be replaced to reference the
# item being replied to. This %{key} should be included in its entirety within the email
# address and not replaced by another value.
# For example: emailaddress+%{key}@example.onmicrosoft.com.
# The placeholder must appear in the "user" part of the address (before the `@`).
gitlab_rails['incoming_email_address'] = "incoming+%{key}@example.onmicrosoft.com"
# Email account username
gitlab_rails['incoming_email_email'] = "incoming@example.onmicrosoft.com"
gitlab_rails['incoming_email_delete_after_delivery'] = false
gitlab_rails['incoming_email_inbox_method'] = 'microsoft_graph'
gitlab_rails['incoming_email_inbox_options'] = {
'tenant_id': '<YOUR-TENANT-ID>',
'client_id': '<YOUR-CLIENT-ID>',
'client_secret': '<YOUR-CLIENT-SECRET>',
'poll_interval': 60 # Optional
}
Microsoft Cloud for US Governmentやその他のAzureデプロイでは、azure_ad_endpoint
とgraph_endpoint
の設定を行います。
- Microsoft Cloud for US Government の例:
gitlab_rails['incoming_email_inbox_options'] = {
'azure_ad_endpoint': 'https://login.microsoftonline.us',
'graph_endpoint': 'https://graph.microsoft.us',
'tenant_id': '<YOUR-TENANT-ID>',
'client_id': '<YOUR-CLIENT-ID>',
'client_secret': '<YOUR-CLIENT-SECRET>',
'poll_interval': 60 # Optional
}
Microsoft Graph APIは、セルフコンパイル・インストールではまだサポートされていません。詳細については、このイシューを参照してください。
暗号化された認証情報を使用
GitLab 15.9 で導入されました。
受信メールの認証情報を設定ファイルにプレーンテキストで保存する代わりに、オプションで受信メールの認証情報に暗号化されたファイルを使うことができます。
前提条件:
- 暗号化された認証情報を使用するには、まず暗号化設定を有効にする必要があります。
暗号化ファイルの設定項目は以下のとおりです:
user
password
-
/etc/gitlab/gitlab.rb
の受信メール設定が以下のようなものだった場合:gitlab_rails['incoming_email_email'] = "incoming-email@mail.example.com" gitlab_rails['incoming_email_password'] = "examplepassword"
-
暗号化されたシークレットを編集します:
sudo gitlab-rake gitlab:incoming_email:secret:edit EDITOR=vim
-
受信メールの暗号化されていないシークレットの内容を入力します:
user: 'incoming-email@mail.example.com' password: 'examplepassword'
-
/etc/gitlab/gitlab.rb
を編集し、email
とpassword
のincoming_email
の設定を削除します。 -
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
Kubernetesシークレットを使用して、受信メールのパスワードを保存します。詳細については、Helm IMAPシークレットをお読みください。
-
docker-compose.yml
の受信メール設定が以下のようなものだった場合:version: "3.6" services: gitlab: image: 'gitlab/gitlab-ee:latest' restart: always hostname: 'gitlab.example.com' environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['incoming_email_email'] = "incoming-email@mail.example.com" gitlab_rails['incoming_email_password'] = "examplepassword"
-
コンテナ内に入り、暗号化されたシークレットを編集します:
sudo docker exec -t <container_name> bash gitlab-rake gitlab:incoming_email:secret:edit EDITOR=editor
-
受信メールの暗号化されていないシークレットの内容を入力します:
user: 'incoming-email@mail.example.com' password: 'examplepassword'
-
docker-compose.yml
を編集し、email
とpassword
のincoming_email
の設定を削除します。 -
ファイルを保存して GitLab を再起動します:
docker compose up -d
-
/home/git/gitlab/config/gitlab.yml
の受信メール設定が以下のようなものだった場合:production: incoming_email: user: 'incoming-email@mail.example.com' password: 'examplepassword'
-
暗号化されたシークレットを編集します:
bundle exec rake gitlab:incoming_email:secret:edit EDITOR=vim RAILS_ENVIRONMENT=production
-
受信メールの暗号化されていないシークレットの内容を入力します:
user: 'incoming-email@mail.example.com' password: 'examplepassword'
-
/home/git/gitlab/config/gitlab.yml
を編集し、user
とpassword
のincoming_email:
の設定を削除します。 -
ファイルを保存して GitLab と Mailroom を再起動します。
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart