[76ebb1b] | 1 | import logging |
---|
| 2 | |
---|
| 3 | from pyramid_mailer import get_mailer |
---|
[1829fbf] | 4 | from pyramid_mailer.message import Message, Attachment |
---|
[76ebb1b] | 5 | from pyramid.renderers import render |
---|
| 6 | from pyramid.i18n import TranslationStringFactory |
---|
| 7 | |
---|
[1829fbf] | 8 | import premailer |
---|
| 9 | |
---|
[76ebb1b] | 10 | _ = TranslationStringFactory('OpenWorkouts') |
---|
| 11 | |
---|
| 12 | log = logging.getLogger(__name__) |
---|
| 13 | |
---|
| 14 | |
---|
| 15 | def idna_encode_recipients(message): |
---|
| 16 | """ |
---|
| 17 | Given a pyramid_mailer.message.Message instance, check if the recipient(s) |
---|
| 18 | domain name(s) contain non-ascii characters and, if so, encode the domain |
---|
| 19 | name part of the address(es) properly |
---|
| 20 | |
---|
| 21 | >>> from pyramid_mailer.message import Message |
---|
| 22 | >>> message = Message(subject='s', recipients=['a@a.com'], body='b') |
---|
| 23 | >>> assert message.recipients == ['a@a.com'] |
---|
| 24 | >>> message = idna_encode_recipients(message) |
---|
| 25 | >>> assert message.recipients == ['a@a.com'] |
---|
| 26 | >>> message.recipients.append(u'a@\xfc.de') |
---|
| 27 | >>> assert message.recipients == ['a@a.com', u'a@\xfc.de'] |
---|
| 28 | >>> message = idna_encode_recipients(message) |
---|
| 29 | >>> message.recipients |
---|
| 30 | ['a@a.com', 'a@xn--tda.de'] |
---|
| 31 | """ |
---|
| 32 | recipients = [] |
---|
| 33 | for rcpt in message.recipients: |
---|
| 34 | username, domain = rcpt.split('@') |
---|
| 35 | recipients.append( |
---|
| 36 | '@'.join([username, domain.encode('idna').decode('utf-8')])) |
---|
| 37 | message.recipients = recipients |
---|
| 38 | return message |
---|
| 39 | |
---|
| 40 | |
---|
| 41 | def send_verification_email(request, user): |
---|
| 42 | subject = _('Welcome to OpenWorkouts') |
---|
[b8ef4ab] | 43 | txt_template = 'ow:templates/mail_verify_account_txt.pt' |
---|
| 44 | html_template = 'ow:templates/mail_verify_account_html.pt' |
---|
[76ebb1b] | 45 | verify_link = request.resource_url(user, 'verify', user.verification_token) |
---|
| 46 | context = {'user': user, 'verify_link': verify_link} |
---|
| 47 | mailer = get_mailer(request) |
---|
[b8ef4ab] | 48 | txt_body = render(txt_template, context, request) |
---|
[1829fbf] | 49 | html_body = premailer.transform(render(html_template, context, request)) |
---|
[b8ef4ab] | 50 | message = Message( |
---|
| 51 | subject=subject, |
---|
| 52 | recipients=[user.email], |
---|
[1829fbf] | 53 | body=Attachment(data=txt_body, |
---|
| 54 | content_type="text/plain; charset=utf-8", |
---|
| 55 | transfer_encoding="quoted-printable"), |
---|
| 56 | html=Attachment(data=html_body, |
---|
| 57 | content_type="text/html; charset=utf-8", |
---|
| 58 | transfer_encoding="quoted-printable") |
---|
[b8ef4ab] | 59 | ) |
---|
[76ebb1b] | 60 | message = idna_encode_recipients(message) |
---|
| 61 | mailer.send_to_queue(message) |
---|