-
Notifications
You must be signed in to change notification settings - Fork 7
/
emails.py
68 lines (49 loc) · 2.02 KB
/
emails.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import os
import requests
from flask import render_template
class BaseEmail(object):
send_from = "[email protected]"
translate_newlines = True
def __init__(self, send_to, context):
# make sure the context contains all the info we'll need to render this
# better to fail early than have blank or malformed emails going out
for key in self.required_context:
if key not in context.keys():
raise Exception("Cannot send email without the '{}'. {}".format(key, context))
if not context[key]:
raise Exception("Cannot send email with a blank '{}'. {}".format(key, context))
html = render_template(self.template_path, **context)
if self.translate_newlines:
html = html.replace("\n", "<br>\n")
return self.send(
send_to,
self.send_from,
self.get_subject(**context),
html
)
def get_subject(self):
return NotImplementedError("Subclasses must define their own subject methods")
def send(self, send_to, send_from, subject, html):
print(subject)
print(html)
endpoint = "https://api.mailgun.net/v3/{domain}/messages".format(domain=os.environ["MAILGUN_DOMAIN"])
r = requests.post(
endpoint,
auth=('api', os.environ["MAILGUN_API_KEY"]),
data={
"from": send_from,
"to": send_to,
"subject": subject,
"html": html,
}
)
class WelcomeEmail(BaseEmail):
required_context = ["user"]
template_path = "email/welcome.html"
def get_subject(self, user, **kwargs): # non-used context keys can be swallowed w **kwargs
return "Welcome, {}".format(user.email)
class PasswordResetEmail(BaseEmail):
required_context = ["user"]
template_path = "email/password-reset.html"
def get_subject(self, **kwargs): # non-used context keys can be swallowed w **kwargs
return "Your password reset link"