电子邮件通知支持¶
作为一种通知服务,电子邮件是我们应该支持的重要订阅者之一。考虑到电子邮件是现代世界获取消息的最常用方式。
蓝图: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’ 检查。
手动测试
文档影响¶
需要记录该功能