Index: modules/system/system.mail.inc
===================================================================
--- modules/system/system.mail.inc	(revision 26)
+++ modules/system/system.mail.inc	(working copy)
@@ -41,23 +41,50 @@
    *   TRUE if the mail was successfully accepted, otherwise FALSE.
    */
   public function mail(array $message) {
+    // If 'Return-Path' isn't already set in php.ini, we pass it separately
+    // as an additional parameter instead of in the header.
+    // However, if PHP's 'safe_mode' is on, this is not allowed.
+    if (isset($message['headers']['Return-Path']) && !ini_get('safe_mode')) {
+      $return_path_set = strpos(ini_get('sendmail_path'), ' -f');
+      if (!$return_path_set) {
+        $message['Return-Path'] = $message['headers']['Return-Path'];
+        unset($message['headers']['Return-Path']);
+      }
+    }
     $mimeheaders = array();
     foreach ($message['headers'] as $name => $value) {
       $mimeheaders[] = $name . ': ' . mime_header_encode($value);
     }
     $line_endings = variable_get('mail_line_endings', MAIL_LINE_ENDINGS);
-    return mail(
-      $message['to'],
-      mime_header_encode($message['subject']),
-      // Note: e-mail uses CRLF for line-endings. PHP's API requires LF
-      // on Unix and CRLF on Windows. Drupal automatically guesses the
-      // line-ending format appropriate for your system. If you need to
-      // override this, adjust $conf['mail_line_endings'] in settings.php.
-      preg_replace('@\r?\n@', $line_endings, $message['body']),
-      // For headers, PHP's API suggests that we use CRLF normally,
-      // but some MTAs incorrectly replace LF with CRLF. See #234403.
-      join("\n", $mimeheaders)
-    );
+    if(isset($message['Return-Path']) && !ini_get('safe_mode')) {
+      $mail_result =  mail(
+        $message['to'],
+        mime_header_encode($message['subject']),
+        // Note: e-mail uses CRLF for line-endings. PHP's API requires LF
+        // on Unix and CRLF on Windows. Drupal automatically guesses the
+        // line-ending format appropriate for your system. If you need to
+        // override this, adjust $conf['mail_line_endings'] in settings.php.
+        preg_replace('@\r?\n@', $line_endings, $message['body']),
+        // For headers, PHP's API suggests that we use CRLF normally,
+        // but some MTAs incorrectly replace LF with CRLF. See #234403.
+        join("\n", $mimeheaders),
+        // Pass the Return-Path via sendmail's -f command.
+        '-f ' . $message['Return-Path']
+      );    
+     }
+     else {
+      // the fifth parameter is not allowed in safe mode no matter what you set
+      // for the fifth parameter (NULL, '', ...), PHP will always 'complain' so
+      // this means bad headers when in safe mode, unless php.ini is set up
+      // correctly
+      $mail_result =  mail(
+        $message['to'],
+        mime_header_encode($message['subject']),
+        preg_replace('@\r?\n@', $line_endings, $message['body']),
+        join("\n", $mimeheaders)
+      );
+    }
+    return $mail_result;
   }
 }
 
