$value) { $mimeheaders[] = $name . ': ' . Unicode::mimeHeaderEncode($value); } $line_endings = Settings::get('mail_line_endings', PHP_EOL); // Prepare mail commands. $mail_subject = Unicode::mimeHeaderEncode($message['subject']); // Note: email uses CRLF for line-endings. PHP's API requires LF // on Unix and CRLF on Windows. Drupal automatically guesses the // line-ending format appropriate for your system. If you need to // override this, adjust $settings['mail_line_endings'] in settings.php. $mail_body = preg_replace('@\r?\n@', $line_endings, $message['body']); // 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); $request = \Drupal::request(); // 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 (!$request->server->has('WINDIR') && strpos($request->server->get('SERVER_SOFTWARE'), 'Win32') === FALSE) { // 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. $additional_headers = isset($message['Return-Path']) ? '-f' . $message['Return-Path'] : ''; $mail_result = @mail( $message['to'], $mail_subject, $mail_body, $mail_headers, $additional_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; } }