Index: django/core/mail.py
===================================================================
--- django/core/mail.py	(revision 5023)
+++ django/core/mail.py	(working copy)
@@ -34,7 +34,7 @@
             val = Header(val, settings.DEFAULT_CHARSET)
         MIMEText.__setitem__(self, name, val)
 
-def send_mail(subject, message, from_email, recipient_list, fail_silently=False, auth_user=None, auth_password=None):
+def send_mail(subject, message, from_email, recipient_list, fail_silently=False, auth_user=None, auth_password=None, additional_headers_dict={}):
     """
     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.
@@ -46,12 +46,14 @@
         auth_user = settings.EMAIL_HOST_USER
     if auth_password is None:
         auth_password = settings.EMAIL_HOST_PASSWORD
-    return send_mass_mail([[subject, message, from_email, recipient_list]], fail_silently, auth_user, auth_password)
+    return send_mass_mail([[subject, message, from_email, recipient_list, additional_headers_dict]], fail_silently, auth_user, auth_password)
 
 def send_mass_mail(datatuple, fail_silently=False, auth_user=None, auth_password=None):
     """
-    Given a datatuple of (subject, message, from_email, recipient_list), sends
-    each message to each recipient list. Returns the number of e-mails sent.
+    Given a datatuple of (subject, message, from_email, recipient_list) or
+    (subject, message, from_email, recipient_list, additional_headers_dict),
+    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.
     If auth_user and auth_password are set, they're used to log in.
@@ -71,7 +73,13 @@
             return
         raise
     num_sent = 0
-    for subject, message, from_email, recipient_list in datatuple:
+    for data in datatuple:
+        if len(data) == 5:
+            subject, message, from_email, recipient_list, additional_headers_dict = data
+        else:
+            # Backwards compatibility (no additional_headers_dict passed)
+            subject, message, from_email, recipient_list = data
+            additional_headers_dict = {}
         if not recipient_list:
             continue
         from_email = from_email or settings.DEFAULT_FROM_EMAIL
@@ -85,6 +93,10 @@
         except AttributeError: # Python 2.3 doesn't have random.getrandbits().
             random_bits = ''.join([random.choice('1234567890') for i in range(19)])
         msg['Message-ID'] = "<%d.%s@%s>" % (time.time(), random_bits, DNS_NAME)
+        core_headers = ['Subject', 'From', 'To', 'Date', 'Message-ID']
+        for header in additional_headers_dict:
+            if header not in core_headers:
+                msg[header] = additional_headers_dict[header]
         try:
             server.sendmail(from_email, recipient_list, msg.as_string())
             num_sent += 1
Index: docs/email.txt
===================================================================
--- docs/email.txt	(revision 5023)
+++ docs/email.txt	(working copy)
@@ -35,7 +35,7 @@
 
     send_mail(subject, message, from_email, recipient_list,
         fail_silently=False, auth_user=None,
-        auth_password=None)
+        auth_password=None, additional_headers_dict={})
 
 The ``subject``, ``message``, ``from_email`` and ``recipient_list`` parameters
 are required.
@@ -55,6 +55,8 @@
     * ``auth_password``: The optional password to use to authenticate to the
       SMTP server. If this isn't provided, Django will use the value of the
       ``EMAIL_HOST_PASSWORD`` setting.
+    * ``additional_headers_dict``: An optional dictionary of additional headers
+      to use in the outgoing e-mail.
 
 .. _smtplib docs: http://www.python.org/doc/current/lib/module-smtplib.html
 
@@ -67,9 +69,11 @@
     send_mass_mail(datatuple, fail_silently=False,
         auth_user=None, auth_password=None):
 
-``datatuple`` is a tuple in which each element is in this format::
+``datatuple`` is a tuple in which each element is either of the following
+formats::
 
     (subject, message, from_email, recipient_list)
+    (subject, message, from_email, recipient_list, additional_headers_dict)
 
 ``fail_silently``, ``auth_user`` and ``auth_password`` have the same functions
 as in ``send_mail()``.
