Working with E-mails¶
Writing e-mails¶
Find a meaningful name for your email, we'll use
something-awesome-happened.
Create those 3 new templates in a folder named like your email:
warehouse/templates/email/something-awesome-happened/body.txtwarehouse/templates/email/something-awesome-happened/subject.txtwarehouse/templates/email/something-awesome-happened/subject.html
Write these templates (as jinja2 templates), take note of the context
variables you need.
Add a function in warehouse/emails/__init__.py that will take request
and user as well as any number of parameters, and will return the context
for rendering your email:
@_email("something-awesome-happened")
def send_something_awesome_happened_email(
request, user, *, arbitrary, arguments
):
return {
"arbitrary": arbitrary,
"arguments": arguments,
}
From your code, call that function.
What it does¶
Calling a function with the _email decorator does the following:
- The email is sent from an asynchronous task, to avoid delaying the HTTP response
- A security log is added to the user's account
- The email is sent using Amazon SES (on production environment)
- A metric is sent to Datadog named
warehouse.emails.scheduledwith the tagstemplate_name,allow_unverified, andrepeat_window.
Testing e-mails¶
When an email is sent in the development environment, it's printed in the
console, and sent to the maildev service using SMTP. maildev is a
service defined in docker-compose.yml that receives emails, stores them and
lets you read them from a web interface at http://localhost:1080.