GitLabのメール通知とは

この記事では、RHEL8のサーバ上に構築したGitLab Community Edition(CE)のメール通知を設定する方法について解説します。

GitLab CEの基本的なインストール方法については、以下で詳しく解説しています。

GitLabのメール通知とは

GitLabは、Gitをベースにした分散型バージョン管理システムで、開発者がコードを管理し、チームで共同作業を進めるためのツールを提供するアプリケーションです。

GitLabにはメール通知機能があり、これを活用することでプロジェクトの進捗をリアルタイムで共有し、チームのコミュニケーションを円滑にすることができます。

Issueやマージリクエストの更新、CI/CDの結果、コードレビューの指摘などを即座に受け取ることで、開発を効率的に進められます。

また、権限変更やシステムアラートの通知により、セキュリティ管理やトラブルにも迅速に対応できます。特にイントラネット環境では外部ツールが使えない場合もあるため、有効な情報共有手段となります。

この手順では、イントラネット内にSTARTTLS対応のメール送信(SMTP)サーバが準備されていることを前提とします。

STARTTLSは、ユーザー認証情報やメール本文をTLSで暗号化し、セキュアな通信を確立する重要な技術です。

SMTPサーバとは

SMTP(Simple Mail Transfer Protocol)サーバは、メールの送信を担当するサーバです。

今回使用するSMTPサーバは、STARTTLSで暗号化された通信を行います。そのため、GitLabのメール通知機能でも、STARTTLSを使用して安全にメールを送信するように設定していきます。

メール通知設定

GitLab CEのメール通知設定は、管理画面から設定することができません。gitlab.rbファイルを編集してメール通知設定を行います。

# cd /etc/gitlab
# vi gitlab.rb

以下のパラメータを参考に、自身の環境に合わせて設定してください。

 gitlab_rails['smtp_enable'] = true
 gitlab_rails['smtp_address'] = "srv00.reafnex.local"
 gitlab_rails['smtp_port'] = 587
 gitlab_rails['smtp_user_name'] = "binduser@reafnex.local"
 gitlab_rails['smtp_password'] = "XXXXXXXX"
 gitlab_rails['smtp_domain'] = "reafnex.local"
 gitlab_rails['smtp_authentication'] = "login"
 gitlab_rails['smtp_enable_starttls_auto'] = true
 gitlab_rails['smtp_tls'] = false
 gitlab_rails['smtp_pool'] = false

 gitlab_rails['smtp_openssl_verify_mode'] = 'peer'

 gitlab_rails['smtp_ca_path'] = "/etc/gitlab/ssl"
 gitlab_rails['smtp_ca_file'] = "/etc/gitlab/ssl/reafnex_CA.crt"

 gitlab_rails['gitlab_email_enabled'] = true

 gitlab_rails['gitlab_email_from'] = 'binduser@reafnex.local'
 gitlab_rails['gitlab_email_display_name'] = 'binduser'

各種設定値の意味は、以下のとおりです。説明欄に例と示されている部分は、自身の環境に合わせて設定してください。

項目説明
gitlab_rails[‘smtp_enable’] GitLab の SMTP 経由でのメール送信を有効化する。
設定値:true
gitlab_rails[‘smtp_address’] 使用する SMTP サーバーのホスト名
例:srv00.reafnex.local
gitlab_rails[‘smtp_port’] SMTP サーバーの接続ポート番号
設定値:587
gitlab_rails[‘smtp_user_name’] SMTP 認証に使用するユーザー名
例:binduser@reafnex.local
gitlab_rails[‘smtp_password’] SMTP 認証のパスワード
設定値:SMTP 認証に使用するユーザーのパスワード
gitlab_rails[‘smtp_domain’] SMTP サーバーの HELO / EHLO コマンドで使用するドメイン名
例:reafnex.local
gitlab_rails[‘smtp_authentication’] SMTP 認証方式
設定値:login(ユーザー名とパスワードを送信)
gitlab_rails[‘smtp_enable_starttls_auto’] STARTTLS を自動的に有効化し、暗号化通信を行う。
設定値:true
gitlab_rails[‘smtp_tls’] TLS を直接使用しない。
設定値:false(STARTTLS を使用するため。)
gitlab_rails[‘smtp_pool’] SMTP 接続のプール(再利用)を無効化する。
設定値:false
gitlab_rails[‘smtp_openssl_verify_mode’] SMTP サーバーの SSL 証明書の検証を有効化する。
設定値:peer (サーバー証明書を検証する。)
gitlab_rails[‘smtp_ca_path’] CA 証明書のパス。
例:/etc/gitlab/ssl
gitlab_rails[‘smtp_ca_file’] SMTP サーバーの証明書を検証するための CA 証明書ファイル
例:/etc/gitlab/ssl/reafnex_CA.crt
gitlab_rails[‘gitlab_email_enabled’] GitLab のメール通知を有効化する。
設定値:true
gitlab_rails[‘gitlab_email_from’] GitLab がメールを送信する際の送信元メールアドレス
例:binduser@reafnex.local
gitlab_rails[‘gitlab_email_display_name’] GitLabが送信したメールに表示される送信者名
例:binduser
SMTP設定値一覧

パスワードを設定する項目があるため、gitlab.rbファイルのパーミッションが600であることを確認し、rootユーザ以外がアクセスできないことを確認してください。

設定を保存したら、自己認証局のCA証明書を「gitlab_rails[‘smtp_ca_path’] 」で設定したディレクトリに配置して、GitLabの環境構築を再実行します。

# gitlab-ctl reconfigure
# gitlab-ctl restart

メール転送をテストする

GitLab CEのメール転送は、GitLabのRailsコンソールを使ってテストすることができます。

# gitlab-rails console
--------------------------------------------------------------------------------
 Ruby:         ruby 3.2.5 (2024-07-26 revision 31d0f1a2e7) [x86_64-linux]
 GitLab:       17.9.1 (073f7efc655) FOSS
 GitLab Shell: 14.40.0
 PostgreSQL:   14.15
------------------------------------------------------------[ booted in 63.33s ]
Loading production environment (Rails 7.0.8.7)
irb(main):001:0>

「宛先メールアドレス」、「メール表題」、「メール本文」の順で記述し、以下のように実行します。

irb(main):001:0> Notify.test_email('<宛先メールアドレス>', 'SMTP Test', 'This is a test email from GitLab.').deliver_now

メール送信が正常に処理された場合は、以下のようにメールヘッダが表示されます。

Delivered mail 67cbb0f7132d5_24b30ac25313@gitlab.reafnex.net.mail (223.8ms)
=> #<Mail::Message:524280, Multipart: false, Headers: <Date: Sat, 08 Mar 2025 02:52:39 +0000>, <From: binduser <binduser@reafnex.local>>, <Reply-To: binduser <noreply@gitlab.reafnex.local>>, <To: admin@reafnex.local>, <Message-ID: <67cbb0f7132d5_24b30ac25313@gitlab.reafnex.net.mail>>, <Subject: SMTP Test>, <Mime-Version: 1.0>, <Content-Type: text/html; charset=UTF-8>, <Content-Transfer-Encoding: 7bit>, <Auto-Submitted: auto-generated>, <X-Auto-Response-Suppress: All>>

もし、メールの送信がうまくいかない場合は、GitLabのRailsコンソールに表示された内容とメールサーバのログを比較して原因を見つけてください。

また、以下のコマンドを使うとSMTPサーバに正しく接続できているか確認することができます。

# telnet <SMTPサーバーのホスト名> 587

# openssl s_client -connect <SMTPサーバーのホスト名>:587

まとめ

いかがでしたでしょうか。

今回は、RHEL8上に構築したGitLab Community Edition(CE)のメール通知設定について解説しました。

適切にメール通知を設定することで、Issueやマージリクエストの更新、CI/CDの結果などをリアルタイムに受け取ることができるため、開発効率が格段に向上します。

特にイントラネット環境では外部のメールサービスが利用できないことが多いため、内部のSMTPサーバーを活用して情報共有できることが重要になります。

GitLab CEは管理画面から直接メール送信のテストは実行できないため、Railsコンソールを活用してSMTP設定を確認する方法も紹介しました。

もしメール通知がうまく動作しない場合は、GitLabのログやSMTPサーバのログを確認し、設定値を見直したり、telnetやopensslコマンドを活用してSMTPサーバに正しく接続できているか確認してみてください。

参考になれば幸いです。

システムのお悩みについてご相談ください

本サイトの掲載内容に関するお問い合わせは、こちらから承ります。
SOHOのシステム運用管理に関するお悩みごとについて、なんでもお気兼ねなくご相談ください。
現役システムエンジニアのスタッフが、ボランティアでご相談にご対応させていただきます。