summaryrefslogtreecommitdiff
path: root/modules/system/system.mail.inc
diff options
context:
space:
mode:
Diffstat (limited to 'modules/system/system.mail.inc')
-rw-r--r--modules/system/system.mail.inc65
1 files changed, 43 insertions, 22 deletions
diff --git a/modules/system/system.mail.inc b/modules/system/system.mail.inc
index ef50642c5..4e7544006 100644
--- a/modules/system/system.mail.inc
+++ b/modules/system/system.mail.inc
@@ -65,28 +65,49 @@ 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']
- );
- }
- 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
- );
- }
- return $mail_result;
+
+ // 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 {
+ // 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;
}
}