From 93d20e881c618ba2df4f1d0d570a2bdfeddb4a1e Mon Sep 17 00:00:00 2001
From: Bob Vincent <bobvin@pillars.net>
Date: Sat, 21 May 2011 10:59:06 -0400
Subject: [PATCH] Issue #131737 by score, vince, AmrMostafa, Pancho, mrfelton, nvanhove, malc0mn, dhthwy, pillarsdotnet: Ensure that the Return-Path is set when sending mail on both Windows and non-Windows systems.

---
 modules/system/system.mail.inc |   43 ++++++++++++++++++++++-----------------
 1 files changed, 24 insertions(+), 19 deletions(-)

diff --git a/modules/system/system.mail.inc b/modules/system/system.mail.inc
index ef50642c55a9db8c36ceb9a976f5f0d78096a3fc..69d4d0a640691c2b5c54028b401da71f4421c7a8 100644
--- a/modules/system/system.mail.inc
+++ b/modules/system/system.mail.inc
@@ -66,25 +66,30 @@ class DefaultMailSystem implements MailSystemInterface {
     // but some MTAs incorrectly replace LF with CRLF. See #234403.
     $mail_headers = join("\n", $mimeheaders);
     if (isset($message['Return-Path']) && !ini_get('safe_mode')) {
-      $mail_result = mail(
-        $message['to'],
-        $mail_subject,
-        $mail_body,
-        $mail_headers,
-        // Pass the Return-Path via sendmail's -f command.
-        '-f ' . $message['Return-Path']
-      );
-    }
-    else {
-      // The optional $additional_parameters argument to mail() is not allowed
-      // if safe_mode is enabled. Passing any value throws a PHP warning and
-      // makes mail() return FALSE.
-      $mail_result = mail(
-        $message['to'],
-        $mail_subject,
-        $mail_body,
-        $mail_headers
-      );
+      if (isset($_SERVER['WINDIR']) || strpos($_SERVER['SERVER_SOFTWARE'], 'Win32') !== FALSE) {
+        // On Windows, PHP will use the value of sendmail_from for the
+        // Return-Path header.
+        $old_from = ini_get('sendmail_from');
+        ini_set('sendmail_from', $message['Return-Path']);
+        $mail_result = @mail(
+          $message['to'],
+          $mail_subject,
+          $mail_body,
+          $mail_headers
+        );
+        ini_set('sendmail_from', $old_from);
+      }
+      else {
+        // On most non-Windows systems, the "-f" option to the sendmail command
+        // is used to set the Return-Path.
+        $mail_result = @mail(
+          $message['to'],
+          $mail_subject,
+          $mail_body,
+          $mail_headers,
+          '-f' . $message['Return-Path']
+        );
+      }
     }
     return $mail_result;
   }
-- 
1.7.4.1

