Index: django/core/mail.py
===================================================================
--- django/core/mail.py	(revision 6474)
+++ django/core/mail.py	(working copy)
@@ -182,7 +182,7 @@
         if not email_message.to:
             return False
         try:
-            self.connection.sendmail(email_message.from_email,
+            self.connection.sendmail(email_message.return_path,
                     email_message.recipients(),
                     email_message.message().as_string())
         except:
@@ -200,7 +200,7 @@
     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, return_path=None):
         """
         Initialise a single email message (which can be sent to multiple
         recipients).
@@ -212,6 +212,7 @@
         self.to = to or []
         self.bcc = bcc or []
         self.from_email = from_email or settings.DEFAULT_FROM_EMAIL
+        self.return_path = return_path or self.from_email
         self.subject = subject
         self.body = body
         self.attachments = attachments or []
Index: tests/modeltests/test_client/views.py
===================================================================
--- tests/modeltests/test_client/views.py	(revision 6474)
+++ tests/modeltests/test_client/views.py	(working copy)
@@ -151,6 +151,15 @@
         ['first@example.com', 'second@example.com']).send()
     return HttpResponse("Mail sent")
 
+def mail_sending_view_with_return_path(request):
+    EmailMessage(
+        "Test message",
+        "This is a test email",
+        "from@example.com",
+        ['first@example.com', 'second@example.com'],
+        return_path='return_path@example.com').send()
+    return HttpResponse("Mail sent")
+
 def mass_mail_sending_view(request):
     m1 = EmailMessage(
         'First Test message',
@@ -161,7 +170,8 @@
         'Second Test message',
         'This is the second test email',
         'from@example.com',
-        ['second@example.com', 'third@example.com'])
+        ['second@example.com', 'third@example.com'],
+        return_path='return_path@example.com')
 
     c = SMTPConnection()
     c.send_messages([m1,m2])
Index: tests/modeltests/test_client/models.py
===================================================================
--- tests/modeltests/test_client/models.py	(revision 6474)
+++ tests/modeltests/test_client/models.py	(working copy)
@@ -331,9 +331,24 @@
         self.assertEqual(mail.outbox[0].subject, 'Test message')
         self.assertEqual(mail.outbox[0].body, 'This is a test email')
         self.assertEqual(mail.outbox[0].from_email, 'from@example.com') 
+        self.assertEqual(mail.outbox[0].return_path, 'from@example.com') 
         self.assertEqual(mail.outbox[0].to[0], 'first@example.com')
         self.assertEqual(mail.outbox[0].to[1], 'second@example.com')
 
+    def test_mail_sending_with_return_path(self):
+        "Test that mail is redirected to a dummy outbox during test setup (with return_path set correctly)"
+    
+        response = self.client.get('/test_client/mail_sending_view_with_return_path/')
+        self.assertEqual(response.status_code, 200)
+    
+        self.assertEqual(len(mail.outbox), 1)
+        self.assertEqual(mail.outbox[0].subject, 'Test message')
+        self.assertEqual(mail.outbox[0].body, 'This is a test email')
+        self.assertEqual(mail.outbox[0].from_email, 'from@example.com') 
+        self.assertEqual(mail.outbox[0].return_path, 'return_path@example.com') 
+        self.assertEqual(mail.outbox[0].to[0], 'first@example.com')
+        self.assertEqual(mail.outbox[0].to[1], 'second@example.com')
+
     def test_mass_mail_sending(self):
         "Test that mass mail is redirected to a dummy outbox during test setup"
         
@@ -344,12 +359,14 @@
         self.assertEqual(mail.outbox[0].subject, 'First Test message')
         self.assertEqual(mail.outbox[0].body, 'This is the first test email')
         self.assertEqual(mail.outbox[0].from_email, 'from@example.com') 
+        self.assertEqual(mail.outbox[0].return_path, 'from@example.com') 
         self.assertEqual(mail.outbox[0].to[0], 'first@example.com')
         self.assertEqual(mail.outbox[0].to[1], 'second@example.com')
 
         self.assertEqual(mail.outbox[1].subject, 'Second Test message')
         self.assertEqual(mail.outbox[1].body, 'This is the second test email')
         self.assertEqual(mail.outbox[1].from_email, 'from@example.com') 
+        self.assertEqual(mail.outbox[1].return_path, 'return_path@example.com') 
         self.assertEqual(mail.outbox[1].to[0], 'second@example.com')
         self.assertEqual(mail.outbox[1].to[1], 'third@example.com')
         
Index: tests/modeltests/test_client/urls.py
===================================================================
--- tests/modeltests/test_client/urls.py	(revision 6474)
+++ tests/modeltests/test_client/urls.py	(working copy)
@@ -17,5 +17,6 @@
     (r'^session_view/$', views.session_view),
     (r'^broken_view/$', views.broken_view),
     (r'^mail_sending_view/$', views.mail_sending_view),
+    (r'^mail_sending_view_with_return_path/$', views.mail_sending_view_with_return_path),
     (r'^mass_mail_sending_view/$', views.mass_mail_sending_view)
 )
Index: docs/email.txt
===================================================================
--- docs/email.txt	(revision 6474)
+++ docs/email.txt	(working copy)
@@ -65,6 +65,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.
+    * ``return_path``: An optional string used to specifiy the SMTP envelope
+      sender. If this isn't provided, Django will use ``from_email`` instead.
 
 .. _smtplib docs: http://www.python.org/doc/current/lib/module-smtplib.html
 
@@ -81,8 +83,8 @@
 
     (subject, message, from_email, recipient_list)
 
-``fail_silently``, ``auth_user`` and ``auth_password`` have the same functions
-as in ``send_mail()``.
+``fail_silently``, ``auth_user``, ``auth_password`` and ``return_path`` have the
+same functions as in ``send_mail()``.
 
 Each separate element of ``datatuple`` results in a separate e-mail message.
 As in ``send_mail()``, recipients in the same ``recipient_list`` will all see
@@ -245,6 +247,9 @@
       caller to ensure header names and values are in the correct format for
       an e-mail message.
 
+    * ``return_path``: A string used to specifiy the SMTP envelope
+	      sender. If this isn't provided, Django will use ``from_email`` instead.
+
 For example::
 
     email = EmailMessage('Hello', 'Body goes here', 'from@example.com',
