From 9eb093e93729ffbea9e4663d04851f17275eb575 Tue, 25 Oct 2011 23:39:24 +0200 From: Bram Goffings Date: Tue, 25 Oct 2011 23:39:02 +0200 Subject: [PATCH] Change-Id: I36f4906acfd5c7d179b649432e5c5caafe033909 diff --git a/modules/system/system.mail.inc b/modules/system/system.mail.inc index ef50642..69d4d0a 100644 --- a/modules/system/system.mail.inc +++ b/modules/system/system.mail.inc @@ -66,25 +66,30 @@ // 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; }