diff --git a/core/includes/mail.inc b/core/includes/mail.inc index 1f7897e..cabf917 100644 --- a/core/includes/mail.inc +++ b/core/includes/mail.inc @@ -8,7 +8,7 @@ /** * Auto-detect appropriate line endings for e-mails. * - * $conf['mail_line_endings'] will override this setting. + * $settings['mail_line_endings'] will override this setting. */ define('MAIL_LINE_ENDINGS', isset($_SERVER['WINDIR']) || strpos($_SERVER['SERVER_SOFTWARE'], 'Win32') !== FALSE ? "\r\n" : "\n"); @@ -217,13 +217,13 @@ function drupal_mail($module, $key, $to, $langcode, $params = array(), $from = N * Drupal\Core\Mail\PhpMail implementation. * * The selection of a particular implementation is controlled via the variable - * 'mail_system', which is a keyed array. The default implementation - * is the class whose name is the value of 'default-system' key. A more specific - * match first to key and then to module will be used in preference to the - * default. To specify a different class for all mail sent by one module, set - * the class name as the value for the key corresponding to the module name. To - * specify a class for a particular message sent by one module, set the class - * name as the value for the array key that is the message id, which is + * 'system.mail.system', which is a keyed array. The default implementation + * is the class whose name is the value of 'default' key. A more specific match + * first to key and then to module will be used in preference to the default. To + * specify a different class for all mail sent by one module, set the class + * name as the value for the key corresponding to the module name. To specify + * a class for a particular message sent by one module, set the class name as + * the value for the array key that is the message id, which is * "${module}_${key}". * * For example to debug all mail sent by the user module by logging it to a @@ -231,7 +231,7 @@ function drupal_mail($module, $key, $to, $langcode, $params = array(), $from = N * * @code * array( - * 'default-system' => 'Drupal\Core\Mail\PhpMail', + * 'default' => 'Drupal\Core\Mail\PhpMail', * 'user' => 'DevelMailLog', * ); * @endcode @@ -241,7 +241,7 @@ function drupal_mail($module, $key, $to, $langcode, $params = array(), $from = N * * @code * array( - * 'default-system' => 'Drupal\Core\Mail\PhpMail', + * 'default' => 'Drupal\Core\Mail\PhpMail', * 'user' => 'DevelMailLog', * 'contact_page_autoreply' => 'DrupalDevNullMailSend', * ); @@ -260,13 +260,15 @@ function drupal_mail($module, $key, $to, $langcode, $params = array(), $from = N * alter hook in drupal_mail() would have been {$module}_{$key}. * * @return Drupal\Core\Mail\MailInterface + * + * @throws \Exception */ function drupal_mail_system($module, $key) { $instances = &drupal_static(__FUNCTION__, array()); $id = $module . '_' . $key; - $configuration = variable_get('mail_system', array('default-system' => 'Drupal\Core\Mail\PhpMail')); + $configuration = config('system.mail')->get('system'); // Look for overrides for the default class, starting from the most specific // id, and falling back to the module name. @@ -277,7 +279,7 @@ function drupal_mail_system($module, $key) { $class = $configuration[$module]; } else { - $class = $configuration['default-system']; + $class = $configuration['default']; } if (empty($instances[$class])) { @@ -506,8 +508,9 @@ function drupal_html_to_text($string, $allowed_tags = NULL) { if (isset($casing)) { $chunk = $casing($chunk); } + $line_endings = settings()->get('mail_line_endings', MAIL_LINE_ENDINGS); // Format it and apply the current indentation. - $output .= drupal_wrap_mail($chunk, implode('', $indent)) . MAIL_LINE_ENDINGS; + $output .= drupal_wrap_mail($chunk, implode('', $indent)) . $line_endings; // Remove non-quotation markers from indentation. $indent = array_map('_drupal_html_to_text_clean', $indent); } diff --git a/core/lib/Drupal/Core/Mail/PhpMail.php b/core/lib/Drupal/Core/Mail/PhpMail.php index f5ec995..580a824 100644 --- a/core/lib/Drupal/Core/Mail/PhpMail.php +++ b/core/lib/Drupal/Core/Mail/PhpMail.php @@ -59,13 +59,13 @@ public function mail(array $message) { foreach ($message['headers'] as $name => $value) { $mimeheaders[] = $name . ': ' . mime_header_encode($value); } - $line_endings = variable_get('mail_line_endings', MAIL_LINE_ENDINGS); + $line_endings = settings()->get('mail_line_endings', MAIL_LINE_ENDINGS); // Prepare mail commands. $mail_subject = mime_header_encode($message['subject']); // Note: e-mail 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 $conf['mail_line_endings'] in settings.php. + // 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. diff --git a/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php b/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php index 713839e..cdfd07b 100644 --- a/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php +++ b/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php @@ -838,7 +838,7 @@ protected function setUp() { $this->resetAll(); // Use the test mail class instead of the default mail handler class. - variable_set('mail_system', array('default-system' => 'Drupal\Core\Mail\VariableLog')); + config('system.mail')->set('system', array('default' => 'Drupal\Core\Mail\VariableLog'))->save(); drupal_set_time_limit($this->timeLimit); // Temporary fix so that when running from run-tests.sh we don't get an diff --git a/core/modules/system/config/system.mail.yml b/core/modules/system/config/system.mail.yml new file mode 100644 index 0000000..47316e1 --- /dev/null +++ b/core/modules/system/config/system.mail.yml @@ -0,0 +1,2 @@ +system: + default: 'Drupal\Core\Mail\PhpMail' diff --git a/core/modules/system/lib/Drupal/system/Tests/Mail/HtmlToTextTest.php b/core/modules/system/lib/Drupal/system/Tests/Mail/HtmlToTextTest.php index 5302c8d..f93b40f 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Mail/HtmlToTextTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Mail/HtmlToTextTest.php @@ -348,11 +348,8 @@ public function testDrupalHtmlToTextParagraphs() { public function testVeryLongLineWrap() { $input = 'Drupal

' . str_repeat('x', 2100) . '
Drupal'; $output = drupal_html_to_text($input); - // This awkward construct comes from includes/mail.inc lines 8-13. - $eol = variable_get('mail_line_endings', MAIL_LINE_ENDINGS); - // We must use strlen() rather than drupal_strlen() in order to count - // octets rather than characters. - $line_length_limit = 1000 - drupal_strlen($eol); + $eol = settings()->get('mail_line_endings', MAIL_LINE_ENDINGS); + $maximum_line_length = 0; foreach (explode($eol, $output) as $line) { // We must use strlen() rather than drupal_strlen() in order to count diff --git a/core/modules/system/lib/Drupal/system/Tests/Mail/MailTest.php b/core/modules/system/lib/Drupal/system/Tests/Mail/MailTest.php index bb72d29..9ca7277 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Mail/MailTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Mail/MailTest.php @@ -42,7 +42,7 @@ function setUp() { parent::setUp(); // Set MailTestCase (i.e. this class) as the SMTP library - variable_set('mail_system', array('default-system' => 'Drupal\system\Tests\Mail\MailTest')); + config('system.mail')->set('system.default', 'Drupal\system\Tests\Mail\MailTest')->save(); } /** @@ -119,4 +119,3 @@ public function mail(array $message) { self::$sent_message = $message; } } - diff --git a/core/modules/system/system.install b/core/modules/system/system.install index b632a2f..f47af87 100644 --- a/core/modules/system/system.install +++ b/core/modules/system/system.install @@ -2324,6 +2324,17 @@ function system_update_8045() { } /** + * Converts mail settings to config. + * + * @ingroup config_upgrade + */ +function system_update_8046() { + update_variables_to_config('system.mail', array( + 'mail_system' => 'system', + )); +} + +/** * @} End of "defgroup updates-7.x-to-8.x". * The next series of updates should start at 9000. */