由于各公司的邮件服务往往有不同的实现,所以Apollo定义了一些SPI用来解耦,Apollo接入邮件服务的关键就是实现这些SPI。

在ApolloPortalDB.ServerConfig表配置以下参数,也可以通过管理员工具 - 系统参数页面进行配置,修改完一分钟实时生效。如下:

  • email.config.host smtp的服务地址,如
  • email.config.user smtp帐号用户名
  • email.config.password smtp帐号密码
  • email.supported.envs 支持发送邮件的环境列表,英文逗号隔开。我们不希望发布邮件变成用户的垃圾邮件,只有某些环境下的发布动作才会发送邮件。
  • email.sender 邮件的发送人,可以不配置,默认为email.config.user
  • apollo.portal.address Apollo Portal的地址。方便用户从邮件点击跳转到Apollo Portal查看详细的发布信息。
  • email.template.framework 邮件内容模板框架。将邮件内容模板化、可配置化,方便管理和变更邮件内容。
  • email.template.release.module.diff 发布邮件的diff模块。
  • email.template.rollback.module.diff 回滚邮件的diff模块。
  • email.template.release.module.rules 灰度发布的灰度规则模块。

和SSO类似,每个公司也有自己的邮件服务实现,所以我们相应的定义了接口,现有两个实现类:

  1. CtripEmailService:携程实现的EmailService

2.1 接入步骤

  1. 提供自己公司的实现,并在EmailConfiguration中注册。
  2. 在ApolloPortalDB.ServerConfig表配置以下参数,也可以通过管理员工具 - 系统参数页面进行配置,修改完一分钟实时生效。如下:
  • email.supported.envs 支持发送邮件的环境列表,英文逗号隔开。我们不希望发布邮件变成用户的垃圾邮件,只有某些环境下的发布动作才会发送邮件。
  • email.sender 邮件的发送人。
  • apollo.portal.address Apollo Portal的地址。方便用户从邮件点击跳转到Apollo Portal查看详细的发布信息。
  • email.template.framework 邮件内容模板框架。将邮件内容模板化、可配置化,方便管理和变更邮件内容。
  • email.template.release.module.diff 发布邮件的diff模块。
  • email.template.rollback.module.diff 回滚邮件的diff模块。
  • email.template.release.module.rules 灰度发布的灰度规则模块。

我们提供了,方便大家使用。

2.2 相关代码

  1. 监听发布事件,调用emailbuilder构建邮件内容,然后调用EmailService发送邮件
  2. emailbuilder包是构建邮件内容的实现
  3. 邮件服务注册类

以下为发布邮件和回滚邮件的模板内容样式,邮件模板为html格式,发送html格式的邮件时,可能需要做一些额外的处理,取决于每个公司的邮件服务实现。为了减少字符数,模板经过了压缩处理,可自行格式化提高可读性。

注:使用此模板需要在 portal 的系统参数中配置 apollo.portal.address,指向 apollo portal 的地址

3.2 email.template.release.module.diff

3.3 email.template.rollback.module.diff

3.5 发布邮件样例

3.6 回滚邮件样例