电子邮件通知支持

作为一种通知服务,电子邮件是我们应该支持的重要订阅者之一。考虑到电子邮件是现代世界获取消息的最常用方式。

蓝图:https://blueprints.launchpad.net/zaqar/+spec/email-notification

问题描述

目前 Zaqar 在 Kilo 中才引入通知支持,但仅支持 webhook 驱动。问题是,那些没有 webhook 端点供 Zaqar 访问,但可以使用电子邮件的用户,目前无法从 Zaqar 通知中受益。

提议的变更

在 /notification/task 下添加一个新的任务驱动,它将利用内置的 /usr/sbin/sendmail 命令发送消息。

建议的 REST API 请求如下

POST /v2/queues/{queue_name}/subscriptions

{
    'subscriber': 'mailto:fake@gmail.com',
    'ttl': 3600,
    'options': {'subject': 'Alarm', 'cc': {}, 'bcc': {} }
}

电子邮件通知驱动将支持标准的 mailto 协议,也就是说,主题、抄送和密送可以作为 ‘subscriber’ 属性的一部分。例如

mailto:someone@example.com?subject=This%20is%20the%20subject&cc= someone_else@example.com&body=This%20is%20the%20body

同时,我们也可以在 ‘options’ 属性中支持这些电子邮件字段。

为了避免垃圾邮件,我们可以首先发送一封包含 confirm_token 的确认邮件,默认情况下订阅状态为 ‘inactive’,直到电子邮件所有者点击确认邮件中的 URL。URL 的格式如下

/v2/queues/{queue_name}/subscriptions?subscriber=mailto:fake@gmail.com&confirm_token=22c4f150358e4ed287fa51e050d7f024

然后 Zaqar 将订阅状态从 ‘inactive’ 更新为 ‘active’。

备选方案

从设计/架构的角度来看,如果我们没有用于通知的电子邮件驱动,这意味着我们需要一个电子邮件发送服务来实现相同的目标。考虑到我们可以通过利用 Zaqar 的通知服务中的 mailto 轻松实现,这样做没有太大意义。

数据模型影响

无。

REST API 影响

无。

其他最终用户影响

无。

部署者影响

部署 Zaqar 的部署者需要确保他们已配置电子邮件系统,如果电子邮件通知在 ‘subscriber_types’ 中启用。

开发者影响

无。

实现

负责人

主要负责人

flwang (Feilong Wang)

里程碑

完成目标里程碑:L-2

工作项

  • 添加电子邮件任务驱动

依赖项

  • 需要在主机上配置邮件传输代理。

测试

  • 单元测试

  • 功能测试,例如发送到 $(whoami)@$(hostname) 然后使用 ‘mail’ 检查。

  • 手动测试

文档影响

  • 需要记录该功能

参考资料