開発者向けEメールサービス
メーラーSidekiqジョブとの互換性の確保
Sidekiqジョブは、deliver_later
がActionMailer
で呼び出されるたびにエンキューされます。メーラーの引数を追加または削除する必要がある場合、後方互換性と前方互換性の両方を確保することが重要です。ワーカーの引数を変更する場合は、Sidekiqの手順に従ってください。
新しいメーラーメソッドや新しいメーラーを導入する場合も同様です。どちらかを導入する場合は、新しいワーカーを追加する手順に従ってください。
NotificationService
の次の例では、このメーラーの定義に引数を追加したり削除したりすると、すべてのRailsノードとSidekiqノードが更新されたコードを持つ前にデプロイ中に問題が発生する可能性があります。
mailer.unknown_sign_in_email(user, ip, time).deliver_later
送信済みメール
開発インスタンスで「送信」されたレンダリングメールを表示するには、/rails/letter_opener
にアクセスしてください。
S/MIME 署名されたメールは、現在 letter_opener
でプレビューできません。
メーラーのプレビュー
Railsには、サンプルデータを使ってHTMLやプレーンテキストでメーラーテンプレートをプレビューする方法があります。
プレビューはapp/mailers/previews
内にあり、/rails/mailers
で見ることができます。
詳しくはRailsガイドをご覧ください。
受信メール
-
GitLabのインストールディレクトリに移動します。
-
config/gitlab.yml
のincoming_email
セクションを見つけ、機能を有効にし、特定のIMAPサーバーとメールアカウントの詳細を記入してください:Gmail / Googleアプリの設定、メールボックスを想定
gitlab-incoming@gmail.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}@gmail.com. # The placeholder must appear in the "user" part of the address (before the `@`). It can be omitted but some features, # including Service Desk, may not work properly. 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 # Whether to expunge (permanently remove) messages from the mailbox when they are marked as deleted after delivery expunge_deleted: false
前述の通り、
+
以降は無視され、このメッセージはgitlab-incoming@gmail.com
のメールボックスに送信されます。 -
MailRoomの正しいバージョンがインストールされていることを確認するため、先に進む前にMailRoom Gemのアップデートのセクションを読んで詳細を確認してください。要約すると、
Gemfile
のgitlab-mail_room
バージョンを一時的に最新のgitlab-mail_room
に更新し、bundle install
を実行する必要があります。一時的な回避策なので、この変更をコミットしないでください。 -
GitLabのルートディレクトリでこのコマンドを実行し、
mail_room
:bundle exec mail_room -q -c config/mail_room.yml
-
すべてが正しく設定されていることを確認します:
bundle exec rake gitlab:incoming_email:check RAILS_ENV=development
-
これでメールでの返信が機能するはずです。
メールネームスペース
GitLab 11.7から、メールハンドラーアドレスの新しいフォーマットに対応しました。これはキャッチオールメールボックスをサポートするためです。
新しいメールハンドラを必要とする機能を実装する必要がある場合は、メールキーのフォーマットについて以下の規則に従ってください:
- アクションは常に最後に、
-
で区切ります。例えば、-issue
または-merge-request
- 機能がプロジェクトに関連している場合、キーはプロジェクト識別子(プロジェクトパスのスラッグとプロジェクトID)で始まり、
-
で区切られます。例えばgitlab-org-gitlab-foss-20
- プロジェクト識別子とアクションの間に、作成者トークンなどの追加情報を、
-
で区切って追加できます。例えばgitlab-org-gitlab-foss-20-Author_Token12345678-issue
- にハンドラを登録します。
lib/gitlab/email/handler.rb
有効なメールキーの例
-
gitlab-org-gitlab-foss-20-Author_Token12345678-issue
(新しいイシューを作成) -
gitlab-org-gitlab-foss-20-Author_Token12345678-merge-request
(新しいマージリクエストを作成) -
1234567890abcdef1234567890abcdef-unsubscribe
(会話からの退会) -
1234567890abcdef1234567890abcdef
(会話に返信)
アクション-issue-
は GitLab 内でサービスデスク機能のハンドラとして使用されています。
レガシーフォーマット
古いレガシーフォーマットも引き続きサポートしていますが、新しい機能ではレガシーフォーマットを使用しないでください。メールハンドラとして有効なレガシーフォーマットはこれだけです:
path/to/project+namespace
path/to/project+namespace+action
namespace
namespace+action
GitLab では、サービスデスク機能のハンドラーはpath/to/project
です。
MailRoom Gem の更新
私たちはMailRoom
のフォークであるgitlab-mail_room
を使用しています。できるだけ早く変更をアップストリームし、2つのプロジェクトの同期を保つようにしています。
MailRoomを更新するには
- GitLab Railsの
Gemfile
(マージリクエストの例を参照)を更新してください。 - Helm Chart の設定を更新しました (マージリクエストの例を参照)。