Index: includes/mimemail.admin.inc
===================================================================
RCS file: /cvs/drupal/contributions/modules/mimemail/includes/mimemail.admin.inc,v
retrieving revision 1.1
diff -u -r1.1 mimemail.admin.inc
--- includes/mimemail.admin.inc	22 Feb 2009 20:55:46 -0000	1.1
+++ includes/mimemail.admin.inc	16 Mar 2010 11:10:52 -0000
@@ -43,6 +43,13 @@
     '#default_value' => variable_get('mimemail_alter', 0),
     '#description'   => t('Use the mime mail module to deliver all site messages.  With this option, system emails will have styles and formatting'),
   );
+  
+  $form['mimemail']['mimemail_envelope_sender'] = array(
+    '#type'          => 'checkbox',
+    '#title'         => t('Set the envelope sender address'),
+    '#default_value' => variable_get('mimemail_envelope_sender', 0),
+    '#description'   => t('This option sets the envelope sender address with the <em>-f</em> sendmail option. This option will not be used if the site is running in <em>safe_mode</em>.'),
+  );
 
   $filter_format = variable_get('mimemail_format', FILTER_FORMAT_DEFAULT);
   $form['mimemail']['mimemail_format'] =  filter_form($filter_format, NULL, array("mimemail_format"));
Index: mimemail.module
===================================================================
RCS file: /cvs/drupal/contributions/modules/mimemail/mimemail.module,v
retrieving revision 1.46
diff -u -r1.46 mimemail.module
--- mimemail.module	20 May 2009 23:37:26 -0000	1.46
+++ mimemail.module	16 Mar 2010 11:10:52 -0000
@@ -226,22 +226,36 @@
     case 'multiple':
     case 'single':
     case 'send':
-      if (!is_array($message['address'])) {
-        $message['address'] = array($message['address']);
-      }
-      $status = TRUE;
-      foreach ($message['address'] as $a) {
-        $status = mail(
-          $a,
-          $message['subject'],
-          $message['body'],
-          mimemail_rfc_headers($message['headers'])
-        ) && $status;
+    	$subject = $message['subject'];
+      $body = $message['body'];
+      $headers = $message['headers'];
+      $address = (!is_array($message['address'])) ? array($message['address']) : $message['address'];
 
+      if (variable_get('mimemail_envelope_sender', 0) !== FALSE && 
+          !ini_get('safe_mode') && isset($headers['Return-Path'])) {
+        // If no explicit Return-path set, use From header and add Return-Path.
+        $return_path = '-f'. preg_replace('/(.*<)?(.*?)>?/', "$2", $headers['Return-Path']);
+        foreach ($address as $to) {
+          preg_match('/<([^<>@]+@[^<>@]+)>/', $to, $formatted_address);
+          if (!empty($formatted_address)) {
+            $to = $formatted_address[1];
+          }
+          $status = mail($to, $subject, $body, mimemail_rfc_headers($headers), $return_path) && $status;
+        }
+      } 
+      else {
+        foreach ($address as $to) {
+          preg_match('/<([^<>@]+@[^<>@]+)>/', $to, $formatted_address);
+          if (!empty($formatted_address)) {
+            $to = $formatted_address[1];
+          }
+          $status = mail($to, $subject, $body, mimemail_rfc_headers($headers)) && $status;
+        }
       }
+      
       return $status;
   }
-
+  
   return FALSE;
 }
 
