极狐 GitLab

开发中处理电子邮件

确保邮件程序 Sidekiq 作业的兼容性#

每当在 ActionMailer 上调用 deliver_later 时,一个 Sidekiq 作业会被加入队列。 如果需要添加或删除邮件参数,确保向后和向前兼容非常重要。请遵循 Sidekiq 的 更改 worker 参数 的步骤。

同样的要求也适用于新的邮件方法或新的邮件程序。如果你引入了任何一个,请遵循 添加新 worker 的步骤。 这包括用 功能标志 封装新方法,以便在部署后出现问题时可以禁用该邮件程序。

在以下来自 NotificationService 的示例中, 在该邮件程序的定义中添加或删除参数可能会在部署期间导致问题,因为并非所有 Rails 和 Sidekiq 节点都具有更新后的代码。

ruby
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 指南

接收邮件#

  1. 进入极狐GitLab 安装目录。

  2. 找到 config/gitlab.yml 中的 incoming_email 部分,启用该功能,并填写你特定 IMAP 服务器和电子邮件帐户的详细信息:

    Gmail / Google Apps 的配置,假设邮箱为 gitlab-incoming@gmail.com

    yaml
    1incoming_email: 2 enabled: true 3 4 # The email address including the %{key} placeholder that will be replaced to reference the 5 # item being replied to. This %{key} should be included in its entirety within the email 6 # address and not replaced by another value. 7 # For example: emailaddress+%{key}@gmail.com. 8 # The placeholder must appear in the "user" part of the address (before the `@`). It can be omitted but some features, 9 # including Service Desk, may not work properly. 10 address: "gitlab-incoming+%{key}@gmail.com" 11 12 # Email account username 13 # With third party providers, this is usually the full email address. 14 # With self-hosted email servers, this is usually the user part of the email address. 15 user: "gitlab-incoming@gmail.com" 16 # Email account password 17 password: "[REDACTED]" 18 19 # IMAP server host 20 host: "imap.gmail.com" 21 # IMAP server port 22 port: 993 23 # Whether the IMAP server uses SSL 24 ssl: true 25 # Whether the IMAP server uses StartTLS 26 start_tls: false 27 28 # The mailbox where incoming mail will end up. Usually "inbox". 29 mailbox: "inbox" 30 # The IDLE command timeout. 31 idle_timeout: 60 32 33 # Whether to expunge (permanently remove) messages from the mailbox when they are marked as deleted after delivery 34 expunge_deleted: false

    如上所述,+ 之后的部分会被忽略,此邮件将发送到 gitlab-incoming@gmail.com 的邮箱。

  3. 在继续之前,请阅读 MailRoom Gem 更新 部分以了解更多细节,确保安装了正确版本的 MailRoom。简而言之,你需要暂时将 Gemfile 中的 gitlab-mail_room 版本更新为最新的 gitlab-mail_room,并运行 bundle install不要提交 此更改,因为这是一个临时解决方案。

  4. 在极狐GitLab 根目录下运行以下命令启动 mail_room

    shell
    bundle exec mail_room -q -c config/mail_room.yml
  5. 验证所有配置是否正确:

    shell
    bundle exec rake gitlab:incoming_email:check RAILS_ENV=development
  6. 邮件回复功能现在应该可以正常工作了。

电子邮件命名空间#

极狐GitLab 支持新格式的电子邮件处理器地址。这是为了支持全收邮箱。

如果你需要实现一个需要新电子邮件处理器的功能,请遵循以下电子邮件键格式规则:

  • 操作始终在末尾,用 - 分隔。例如 -issue-merge-request
  • 如果你的功能与项目相关,键以项目标识符(项目路径 slug 和项目 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 中用作 Service Desk 功能的处理器。

传统格式#

虽然我们继续支持较旧的传统格式,但任何新功能都不应使用传统格式。 以下是电子邮件处理器唯一有效的传统格式:

  • path/to/project+namespace
  • path/to/project+namespace+action
  • namespace
  • namespace+action

在极狐GitLab 中,Service Desk 功能的处理器是 path/to/project

MailRoom Gem 更新#

我们使用 gitlab-mail_room,它是 MailRoom 的一个分支,以确保在需要时可以快速更新该 Gem。我们尝试尽快将更改上游到主仓库,并保持两个项目同步。

要更新 MailRoom,请执行以下操作:

  1. 更新极狐GitLab Rails 项目中的 Gemfile(参见示例合并请求)。
  2. 更新 Helm Chart 配置(参见示例合并请求)。

返回开发文档