summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Plant <L.Plant.98@cantab.net>2010-10-07 23:36:02 +0000
committerLuke Plant <L.Plant.98@cantab.net>2010-10-07 23:36:02 +0000
commit0aa438a3dff24a4e257a1190d2ba32893dfbc54d (patch)
tree4de23b42a874fc10f462cc6ff6d2feca1d1ef53b
parent2faa490aeb142345daf7d75a40b8c73e1099f6d8 (diff)
Fixed #7722 - added support for CC in EmailMessage.
Thanks to roberto.digirolamo for the report and initial patch, and dougvanhorn and SmileyChris for further work on the patch. git-svn-id: http://code.djangoproject.com/svn/django/trunk@14000 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/core/mail/message.py18
-rw-r--r--docs/topics/email.txt6
-rw-r--r--tests/regressiontests/mail/tests.py26
3 files changed, 45 insertions, 5 deletions
diff --git a/django/core/mail/message.py b/django/core/mail/message.py
index 91a10a0a5c..a0cb09f7b8 100644
--- a/django/core/mail/message.py
+++ b/django/core/mail/message.py
@@ -105,7 +105,7 @@ class EmailMessage(object):
encoding = None # None => use settings default
def __init__(self, subject='', body='', from_email=None, to=None, bcc=None,
- connection=None, attachments=None, headers=None):
+ connection=None, attachments=None, headers=None, cc=None):
"""
Initialize a single email message (which can be sent to multiple
recipients).
@@ -119,6 +119,11 @@ class EmailMessage(object):
self.to = list(to)
else:
self.to = []
+ if cc:
+ assert not isinstance(cc, basestring), '"cc" argument must be a list or tuple'
+ self.cc = list(cc)
+ else:
+ self.cc = []
if bcc:
assert not isinstance(bcc, basestring), '"bcc" argument must be a list or tuple'
self.bcc = list(bcc)
@@ -145,6 +150,8 @@ class EmailMessage(object):
msg['Subject'] = self.subject
msg['From'] = self.extra_headers.get('From', self.from_email)
msg['To'] = ', '.join(self.to)
+ if self.cc:
+ msg['Cc'] = ', '.join(self.cc)
# Email header names are case-insensitive (RFC 2045), so we have to
# accommodate that when doing comparisons.
@@ -162,9 +169,9 @@ class EmailMessage(object):
def recipients(self):
"""
Returns a list of all recipients of the email (includes direct
- addressees as well as Bcc entries).
+ addressees as well as Cc and Bcc entries).
"""
- return self.to + self.bcc
+ return self.to + self.cc + self.bcc
def send(self, fail_silently=False):
"""Sends the email message."""
@@ -252,7 +259,8 @@ class EmailMultiAlternatives(EmailMessage):
alternative_subtype = 'alternative'
def __init__(self, subject='', body='', from_email=None, to=None, bcc=None,
- connection=None, attachments=None, headers=None, alternatives=None):
+ connection=None, attachments=None, headers=None, alternatives=None,
+ cc=None):
"""
Initialize a single email message (which can be sent to multiple
recipients).
@@ -261,7 +269,7 @@ class EmailMultiAlternatives(EmailMessage):
bytestrings). The SafeMIMEText class will handle any necessary encoding
conversions.
"""
- super(EmailMultiAlternatives, self).__init__(subject, body, from_email, to, bcc, connection, attachments, headers)
+ super(EmailMultiAlternatives, self).__init__(subject, body, from_email, to, bcc, connection, attachments, headers, cc)
self.alternatives=alternatives or []
def attach_alternative(self, content, mimetype):
diff --git a/docs/topics/email.txt b/docs/topics/email.txt
index 31092b0aaa..427bf59f15 100644
--- a/docs/topics/email.txt
+++ b/docs/topics/email.txt
@@ -235,6 +235,9 @@ following parameters (in the given order, if positional arguments are used).
All parameters are optional and can be set at any time prior to calling the
``send()`` method.
+.. versionchanged:: 1.3
+ The ``cc`` argument was added.
+
* ``subject``: The subject line of the e-mail.
* ``body``: The body text. This should be a plain text message.
@@ -261,6 +264,9 @@ All parameters are optional and can be set at any time prior to calling the
caller to ensure header names and values are in the correct format for
an e-mail message.
+ * ``cc``: A list or tuple of recipient addresses used in the "Cc" header
+ when sending the e-mail.
+
For example::
email = EmailMessage('Hello', 'Body goes here', 'from@example.com',
diff --git a/tests/regressiontests/mail/tests.py b/tests/regressiontests/mail/tests.py
index 84be585bfd..05973e608c 100644
--- a/tests/regressiontests/mail/tests.py
+++ b/tests/regressiontests/mail/tests.py
@@ -417,4 +417,30 @@ Content
>>> settings.ADMINS = old_admins
>>> settings.MANAGERS = old_managers
+# Add Cc to the email argument list (#7722)
+
+>>> email = EmailMessage('Subject', 'Content', 'from@example.com', ['to@example.com'], cc=['cc@example.com'])
+>>> message = email.message()
+>>> message['Cc']
+'cc@example.com'
+>>> email.recipients()
+['to@example.com', 'cc@example.com']
+
+>>> email = EmailMessage('Subject', 'Content', 'from@example.com', ['to@example.com','other@example.com'], cc=['cc@example.com', 'cc.other@example.com'])
+>>> message = email.message()
+>>> message['Cc']
+'cc@example.com, cc.other@example.com'
+>>> email.recipients()
+['to@example.com', 'other@example.com', 'cc@example.com', 'cc.other@example.com']
+
+>>> email = EmailMessage('Subject', 'Content', 'from@example.com', ['to@example.com','other@example.com'], cc=['cc@example.com', 'cc.other@example.com'], bcc=['bcc@example.com'])
+>>> message = email.message()
+>>> email.recipients()
+['to@example.com', 'other@example.com', 'cc@example.com', 'cc.other@example.com', 'bcc@example.com']
+
+>>> email = EmailMessage('Subject', 'Content', 'from@example.com', ['to@example.com'], cc=['cc@example.com'])
+>>> message = email.message()
+>>> message.as_string()
+'Content-Type: text/plain; charset="utf-8"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\nSubject: Subject\nFrom: from@example.com\nTo: to@example.com\nCc: cc@example.com\nDate: ...\nMessage-ID: <...>\n\nContent'
+
"""