在开发环境中处理邮件
确保 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 指南。
接收邮件
-
进入 GitLab 安装目录。
-
在
config/gitlab.yml中找到incoming_email部分,启用该功能并填写您的特定 IMAP 服务器和电子邮件账户的详细信息:Gmail / Google Apps 的配置,假设邮箱为
gitlab-incoming@gmail.com:incoming_email: enabled: true # 电子邮件地址,包含将被替换为所引用项目占位符的 %{key}。 # 这个 %{key} 应该完整地包含在电子邮件地址中,而不是被其他值替换。 # 例如:emailaddress+%{key}@gmail.com。 # 占位符必须出现在地址的“用户”部分(在 `@` 之前)。可以省略,但某些功能(包括服务台)可能无法正常工作。 address: "gitlab-incoming+%{key}@gmail.com" # 电子邮件账户用户名 # 对于第三方提供商,这通常是完整的电子邮件地址。 # 对于自托管电子邮件服务器,这通常是电子邮件地址的用户部分。 user: "gitlab-incoming@gmail.com" # 电子邮件账户密码 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如前所述,
+之后的部分会被忽略,此消息将发送到gitlab-incoming@gmail.com的邮箱。 -
在继续操作之前,请阅读 MailRoom Gem 更新 部分,以确保您安装了正确版本的 MailRoom。简而言之,您需要临时将
Gemfile中的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 支持新的邮件处理程序地址格式。这样做是为了支持通配邮箱。
如果您需要实现一个需要新邮件处理程序的功能,请遵循以下邮件键格式规则:
- 操作总是在末尾,用
-分隔。例如-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+namespacepath/to/project+namespace+actionnamespacenamespace+action
在 GitLab 中,Service Desk 功能的处理程序是 path/to/project。
MailRoom Gem 更新
我们使用 gitlab-mail_room(这是 MailRoom 的一个分支),以确保在必要时可以快速更新这个 gem。我们会尽快将更改合并到上游,并保持两个项目的同步。
更新 MailRoom 的步骤: