Ticket #17193: email.py

File email.py, 2.1 KB (added by Carl Meyer, 11 years ago)

Simple ex ampleimplementation (would need integration as Django patch, tests & docs)

Line 
1"""
2Email-sending.
3
4"""
5from django.core.mail import EmailMultiAlternatives
6from django.template.loader import render_to_string
7from django.conf import settings
8
9
10
11def send_templated_multipart(template_name, context, recipients,
12 sender=None, fail_silently=False):
13 """
14 Send a templated multi-part e-mail with both HTML and text parts.
15
16 ``template_name`` should not include an extension. Both HTML (``.html``)
17 and text (``.txt``) versions must exist, as well as ``.subject.txt`` for
18 the subject. For example, 'emails/public_submit' will use
19 ``public_submit.html``, ``public_submit.txt``, and
20 ``public_submit.subject.txt``.
21
22 ``context`` should be a dictionary; all three templates (HTML,
23 text, and subject) are rendered with this same context.
24
25 Other arguments are the same as the ``send_multipart`` function in this
26 module.
27
28 """
29 text_part = render_to_string('%s.txt' % template_name, context)
30 html_part = render_to_string('%s.html' % template_name, context)
31 subject = render_to_string('%s.subject.txt' % template_name, context)
32
33 return send_multipart(
34 subject, text_part, html_part, recipients, sender, fail_silently)
35
36
37
38
39def send_multipart(subject, text_part, html_part, recipients,
40 sender=None, fail_silently=False):
41 """
42 Send a multi-part email with both HTML and text parts.
43
44 ``subject`` should be the email subject as a string (newlines will be
45 replaced with spaces).
46
47 ``text_part`` and ``html_part`` should be text and HTML versions of the
48 email body, as strings.
49
50 ``recipients`` should be a list of email addresses.
51
52 ``sender`` can be an email, 'Name <email>' or None. If unspecified, the
53 ``DEFAULT_FROM_EMAIL`` setting will be used.
54
55 """
56 sender = sender or settings.DEFAULT_FROM_EMAIL
57
58 # collapse newlines in subject to spaces
59 subject = u" ".join(subject.splitlines()).strip()
60 msg = EmailMultiAlternatives(subject, text_part, sender, recipients)
61 msg.attach_alternative(html_part, "text/html")
62 return msg.send(fail_silently)
Back to Top