-
Notifications
You must be signed in to change notification settings - Fork 46
/
emails.py
138 lines (124 loc) · 4.8 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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
from hashlib import sha1
import datetime
import random
from django.urls import reverse
from django.utils.http import int_to_base36
from htk.emails import BaseBatchRelationshipEmails
from htk.mailers import send_email
from htk.utils import htk_setting
from htk.utils import utcnow
class AccountActivationReminderEmails(BaseBatchRelationshipEmails):
def __init__(self):
from htk.apps.accounts.cachekeys import AccountActivationReminderEmailCooldown
template = htk_setting('HTK_ACCOUNT_ACTIVATION_REMINDER_EMAIL_TEMPLATE')
super(AccountActivationReminderEmails, self).__init__(
cooldown_class=AccountActivationReminderEmailCooldown,
template=template
)
def get_recipients(self):
from htk.apps.accounts.utils.lookup import get_inactive_users
inactive_users = get_inactive_users()
# send reminders after 1 day and up to 3 weeks
account_creation_threshold_upper = utcnow() - datetime.timedelta(days=1)
account_creation_threshold_lower = account_creation_threshold_upper - datetime.timedelta(days=21)
users = inactive_users.filter(
date_joined__gte=account_creation_threshold_lower,
date_joined__lte=account_creation_threshold_upper
)
return users
def send_email(self, recipient, **kwargs):
"""Sends an activation reminder email to `recipient`, a Django User
"""
user = recipient
user.profile.send_activation_reminder_email()
def activation_email(user_email, use_https=False, domain=None, template=None, subject=None, sender=None):
"""Sends an activation/confirmation email for user to confirm email address
"""
user = user_email.user
email = user_email.email
domain = domain or htk_setting('HTK_DEFAULT_EMAIL_SENDING_DOMAIN')
context = {
'user': user,
'first_name': user.first_name,
'last_name': user.last_name,
'email': email,
'protocol': use_https and 'https' or 'http',
'domain': domain,
'activation_uri': user_email.get_activation_uri(use_https=use_https, domain=domain),
'site_name': htk_setting('HTK_SITE_NAME'),
}
if template is None:
template = 'accounts/activation'
if subject is None:
subject = htk_setting('HTK_ACCOUNT_EMAIL_SUBJECT_ACTIVATION') % context
if htk_setting('HTK_ACCOUNT_EMAIL_BCC_ACTIVATION'):
bcc = htk_setting('HTK_DEFAULT_EMAIL_BCC')
else:
bcc = None
send_email(
template=template,
subject=subject,
sender=sender,
to=[email,],
context=context,
bcc=bcc
)
def welcome_email(user, template=None, subject=None, sender=None):
context = {
'user': user,
'email': user.profile.confirmed_email or user.email,
'first_name': user.first_name,
'last_name': user.last_name,
'site_name': htk_setting('HTK_SITE_NAME'),
}
if htk_setting('HTK_ACCOUNT_EMAIL_BCC_WELCOME'):
bcc = htk_setting('HTK_DEFAULT_EMAIL_BCC')
else:
bcc = None
template = template or 'accounts/welcome'
subject = (subject or htk_setting('HTK_ACCOUNT_EMAIL_SUBJECT_WELCOME')) % context
send_email(
template=template,
subject=subject,
sender=sender,
to=[user.email],
context=context,
bcc=bcc
)
def password_reset_email(user, token_generator, use_https=False, domain=None, template=None, subject=None, sender=None):
domain = domain or htk_setting('HTK_DEFAULT_DOMAIN')
context = {
'user': user,
'email': user.profile.confirmed_email or user.email,
'protocol': use_https and 'https' or 'http',
'domain': domain,
'site_name': htk_setting('HTK_SITE_NAME'),
'reset_path': reverse(htk_setting('HTK_ACCOUNTS_RESET_PASSWORD_URL_NAME')),
'uid': int_to_base36(user.id),
'token': token_generator.make_token(user),
}
reset_uri = '%(protocol)s://%(domain)s%(reset_path)s?u=%(uid)s&t=%(token)s' % context
context['reset_uri'] = reset_uri
template = template or 'accounts/reset_password'
subject = (subject or htk_setting('HTK_ACCOUNT_EMAIL_SUBJECT_PASSWORD_RESET')) % context
send_email(
template=template,
subject=subject,
sender=sender,
to=[context['email']],
context=context
)
def password_changed_email(user):
context = {
'user': user,
'email': user.profile.confirmed_email or user.email,
'domain': htk_setting('HTK_DEFAULT_DOMAIN'),
'site_name': htk_setting('HTK_SITE_NAME'),
}
subject = htk_setting('HTK_ACCOUNT_EMAIL_SUBJECT_PASSWORD_CHANGED') % context
send_email(
template='accounts/password_changed',
subject=subject,
to=[user.profile.confirmed_email or user.email],
context=context
)