summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcatch2012-01-03 05:42:21 (GMT)
committercatch2012-01-03 05:42:21 (GMT)
commite526dceb97c6070110f2c9ba31de97805326f75e (patch)
tree3beec6102ebfadb36c5d01a340ef88d392e65449
parent5d5cadea60c10ed5e3a00ab7ba19fb088e64a214 (diff)
Issue #131737 by malc0mn, pillarsdotnet, xjm, scor, v1nce, Pancho, mrfelton. et al: Ensure that the Return-Path is set when sending mail on both Windows and non-Windows systems.
-rw-r--r--core/modules/system/system.mail.inc47
1 files changed, 34 insertions, 13 deletions
diff --git a/core/modules/system/system.mail.inc b/core/modules/system/system.mail.inc
index ef50642..1ce9fc0 100644
--- a/core/modules/system/system.mail.inc
+++ b/core/modules/system/system.mail.inc
@@ -65,26 +65,47 @@ class DefaultMailSystem implements MailSystemInterface {
// For headers, PHP's API suggests that we use CRLF normally,
// 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']
- );
+
+ // We suppress warnings and notices from mail() because of issues on some
+ // hosts. The return value of this method will still indicate whether mail
+ // was sent successfully.
+ if (!isset($_SERVER['WINDIR']) && strpos($_SERVER['SERVER_SOFTWARE'], 'Win32') === FALSE) {
+ if (isset($message['Return-Path']) && !ini_get('safe_mode')) {
+ // On most non-Windows systems, the "-f" option to the sendmail command
+ // is used to set the Return-Path. There is no space between -f and
+ // the value of the return path.
+ $mail_result = @mail(
+ $message['to'],
+ $mail_subject,
+ $mail_body,
+ $mail_headers,
+ '-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
+ );
+ }
}
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(
+ // 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;
}