diff --git a/modules/system/system.mail.inc b/modules/system/system.mail.inc index ef50642..c137b3f 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 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'] + ); + } + else { + // 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); + } } return $mail_result; }