﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
464	[patch] Modification of django.core.mail: more fields, using dicts to pass arguments	anonymous	Adrian Holovaty	"Currently, mail.py allows specifying only few email headers. This enhancement would allow to specify fields such as Reply-To, Content-Type and charset. It also adds methods (send_mail_dict, send_mass_mail_dict) allowing to pass these values as a dictionary. It could be done by modifying existing methods and dictionary unpacking, but that would break backwards compatibility (if someone uses fail_silently as a positional argument). So, here's the patch:
{{{
Index: mail.py
===================================================================
--- mail.py	(revision 629)
+++ mail.py	(working copy)
@@ -9,15 +9,28 @@
     Easy wrapper for sending a single message to a recipient list. All members
     of the recipient list will see the other recipients in the 'To' field.
     """"""
-    return send_mass_mail([[subject, message, from_email, recipient_list]], fail_silently)
+    return send_mass_mail([(subject, message, from_email, recipient_list)], fail_silently)
 
+def send_mail_dict(message_dict, fail_silently=False):
+    return send_mass_mail_dict([message_dict], fail_silently)
+
 def send_mass_mail(datatuple, fail_silently=False):
     """"""
     Given a datatuple of (subject, message, from_email, recipient_list), sends
     each message to each recipient list. Returns the number of e-mails sent.
+    If from_email is None, the DEFAULT_FROM_EMAIL setting is used.
+    """""" 
+    keys = (""subject"", ""message"", ""from_email"", ""recipient_list"")
+    return send_mass_mail_dict([dict(zip(keys, item)) for item in datatuple])
 
-    If from_email is None, the DEFAULT_FROM_EMAIL setting is used.
+def send_mass_mail_dict(message_dicts, fail_silently=False):
     """"""
+    Given a list of dictionaries containing email parameters, sends each message
+    to each recipient list. Returns the number of e-mails sent. Available parameters:
+    'from_email', 'recipient_list', 'message', 'subject', 'reply_email', 'content_type'
+    and 'charset'. Two first are mandatory. If from_email is None, the
+    DEFAULT_FROM_EMAIL setting is used.
+    """""" 
     try:
         server = smtplib.SMTP(EMAIL_HOST)
     except:
@@ -25,14 +38,17 @@
             return
         raise
     num_sent = 0
-    for subject, message, from_email, recipient_list in datatuple:
+    for message_dict in message_dicts:
+        recipient_list = message_dict.get(""recipient_list"", None)
         if not recipient_list:
             continue
-        from_email = from_email or DEFAULT_FROM_EMAIL
-        msg = MIMEText(message)
-        msg['Subject'] = subject
-        msg['From'] = from_email
-        msg['To'] = ', '.join(recipient_list)
+        from_email = message_dict.get(""from_email"", None) or DEFAULT_FROM_EMAIL
+        msg = MIMEText(message_dict.get(""message"", """"), _charset=message_dict.get(""charset"", ""us-ascii""))
+        msg[""From""] = from_email
+        msg[""To""] = "", "".join(recipient_list)
+        if message_dict.has_key(""subject""): msg[""Subject""] = message_dict[""subject""]
+        if message_dict.has_key(""reply_email""): msg[""Reply-To""] = message_dict[""reply_email""]
+        if message_dict.has_key(""content_type""): msg.set_type(message_dict[""content_type""])
         server.sendmail(from_email, recipient_list, msg.as_string())
         num_sent += 1
     server.quit()
}}}"	defect	closed	Core (Other)		minor	invalid			Unreviewed	1	0	0	0	0	0
