由于各公司的邮件服务往往有不同的实现,所以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类似,每个公司也有自己的邮件服务实现,所以我们相应的定义了接口,现有两个实现类:
- CtripEmailService:携程实现的EmailService
2.1 接入步骤
- 提供自己公司的实现,并在EmailConfiguration中注册。
- 在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 相关代码
- 监听发布事件,调用emailbuilder构建邮件内容,然后调用EmailService发送邮件
- emailbuilder包是构建邮件内容的实现
- 邮件服务注册类
以下为发布邮件和回滚邮件的模板内容样式,邮件模板为html格式,发送html格式的邮件时,可能需要做一些额外的处理,取决于每个公司的邮件服务实现。为了减少字符数,模板经过了压缩处理,可自行格式化提高可读性。
注:使用此模板需要在 portal 的系统参数中配置 apollo.portal.address,指向 apollo portal 的地址