Email Notification Support

As a notification service, email is one of the importants subscribers we should support. Given email is the most way to get messages in the modern world .

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

Problem description

Now Zaqar just introduces the notification support in Kilo, but only suppport webhook driver. The problem is users who do not have a webhook endpoint for Zaqar to hit, but do have access to email, cannot currently benefit from Zaqar notifications.

Proposed change

Add a new task driver under /notification/task, which will leverage the built-in /usr/sbin/sendmail command to send messages.

Proposed REST API request looks like:

POST /v2/queues/{queue_name}/subscriptions

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

The email notification driver will support the standard mailto protocol, that said, such as subject, cc and bcc could be a part of the ‘subscriber’ attribue. For example:

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

Meanwhile, we can also support those email fields in the ‘options’ attribute.

And to avoid spam, we can send a confirmation email firstly with a confirm_token, then by default the subcription is in ‘inactive’ status, until the email owner clicked the URL in the confirmation email. The URL will be like below:

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

Then Zaqar will update the subscription from ‘inactive’ to ‘active’.

Alternatives

From the design/architecture perspective, if we don’t have an email driver for notification, that means we may need a email-sending-as-a-service to achieve the same goal. It doesn’t make much sense to do that given we can easily do that by leveraging the mailto in Zaqar’s notification service.

Data model impact

None.

REST API impact

None.

Other end user impact

None.

Deployer impact

Deployers who deploy Zaqar will need to ensure that they have email systems configured if the email notification is enabled in ‘subscriber_types’.

Developer impact

None.

Implementation

Assignee(s)

Primary assignee:
flwang (Feilong Wang)

Milestones

Target Milestone for completion: L-2

Work Items

  • Add a task driver for email

Dependencies

  • Mail transfer agent needs to be configured on the host.

Testing

  • Unit tests
  • Functional test, like sending to $(whoami)@$(hostname) and then check with ‘mail’.
  • Manual testing

Documentation Impact

  • Feature need to be documented