Help us learn about your current experience with the documentation. Take the survey.

在开发环境中处理邮件

确保 mailer Sidekiq 任务的兼容性

当在 ActionMailer 上调用 deliver_later 时,会创建一个 Sidekiq 任务。 如果需要添加或删除邮件发送器的参数,必须确保向后和向前兼容性。 请遵循 修改 worker 参数 的 Sidekiq 步骤。

同样的规则也适用于新的邮件发送器方法或新的邮件发送器。如果您引入了其中任何一个,请遵循 添加新的 worker 的步骤。这包括使用 功能开关 包装新方法,以便在部署后出现问题可以禁用新的邮件发送器。

在下面的 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 指南

接收邮件

  1. 进入 GitLab 安装目录。

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

    Gmail / Google Apps 的配置,假设邮箱为 [email protected]

    incoming_email:
      enabled: true
    
      # 电子邮件地址,包含将被替换为所引用项目占位符的 %{key}。
      # 这个 %{key} 应该完整地包含在电子邮件地址中,而不是被其他值替换。
      # 例如:emailaddress+%{key}@gmail.com。
      # 占位符必须出现在地址的“用户”部分(在 `@` 之前)。可以省略,但某些功能(包括服务台)可能无法正常工作。
      address: "gitlab-incoming+%{key}@gmail.com"
    
      # 电子邮件账户用户名
      # 对于第三方提供商,这通常是完整的电子邮件地址。
      # 对于自托管电子邮件服务器,这通常是电子邮件地址的用户部分。
      user: "[email protected]"
      # 电子邮件账户密码
      password: "[REDACTED]"
    
      # IMAP 服务器主机
      host: "imap.gmail.com"
      # IMAP 服务器端口
      port: 993
      # IMAP 服务器是否使用 SSL
      ssl: true
      # IMAP 服务器是否使用 StartTLS
      start_tls: false
    
      # 接收邮件将进入的邮箱。通常是 "inbox"。
      mailbox: "inbox"
      # IDLE 命令超时时间。
      idle_timeout: 60
    
      # 当邮件在投递后被标记为删除时,是否从邮箱中永久删除(expunge)这些邮件
      expunge_deleted: false

    如前所述,+ 之后的部分会被忽略,此消息将发送到 [email protected] 的邮箱。

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

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

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

    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 (回复对话)

GitLab 中使用 -issue- 作为 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 配置(参见 示例合并请求)。

返回开发文档