diff --git a/sites/all/modules/contrib/mail/mimemail/CHANGELOG.txt b/sites/all/modules/contrib/mail/mimemail/CHANGELOG.txt index a35cb6e5..dda9b0a1 100644 --- a/sites/all/modules/contrib/mail/mimemail/CHANGELOG.txt +++ b/sites/all/modules/contrib/mail/mimemail/CHANGELOG.txt @@ -1,6 +1,29 @@ Mime Mail 7.x-1.x, xxxx-xx-xx ----------------------- +Mime Mail 7.x-1.1, 2018-10-17 +----------------------- +- #161907 by RainbowLyte, sgabe: Fixed sanitization of additional mail parameter +- #2986204 by TR: Missing test dependencies + +Mime Mail 7.x-1.0, 2017-05-14 +----------------------- +- #2743229 by Bird-Kid, AdamPS: CSS doesn't get attached in PHP7 +- #2858390 by Munavijayalakshmi, Jigar.addweb: Fix coding standard issues +- #2594743 by skipyT: Theme function called for plain messages also +- #2374673 by smokris: Prevent processing of already embedded images +- #1532352 by sgabe, Matt B: Add permission to view user specific settings +- #2783815 by argiepiano: Add 'Reply-to' field to "Send HTML mail to all users of a role" action +- #2796993 by Cauliflower: Return send status in Rules actions +- #2796965 by Cauliflower: Allow NULL values in Rules actions +- #1568680 by jamsilver: Use $message for themeing +- #2721799 by igorik, sgabe: Minor typo +- #2146513 by torotil, Anybody: Scan theme for other *css* file types +- #2678818 by hoebekewim, das-peter: Mime Mail Compress has a deprecated constructor +- #2553815 by nitrocad, anthonys: Imported font generates empty attachment +- #2562181 by rrfegade: Remove unused varibles +- #2562177 by rrfegade: Spelling errors + Mime Mail 7.x-1.0-beta4, 2015-08-02 ----------------------- - #2413495 by sgabe, siggi_kid: Public images not embedded when file default scheme is private diff --git a/sites/all/modules/contrib/mail/mimemail/README.txt b/sites/all/modules/contrib/mail/mimemail/README.txt index 1bb6aa47..804e73d4 100644 --- a/sites/all/modules/contrib/mail/mimemail/README.txt +++ b/sites/all/modules/contrib/mail/mimemail/README.txt @@ -2,7 +2,7 @@ -- SUMMARY -- This is a Mime Mail component module (for use by other modules). - * It permits users to recieve HTML email and can be used by other modules. The mail + * It permits users to receieve HTML email and can be used by other modules. The mail functionality accepts an HTML message body, mime-endcodes it and sends it. * If the HTML has embedded graphics, these graphics are MIME-encoded and included as a message attachment. diff --git a/sites/all/modules/contrib/mail/mimemail/includes/mimemail.admin.inc b/sites/all/modules/contrib/mail/mimemail/includes/mimemail.admin.inc index ca71e54e..7155e79a 100644 --- a/sites/all/modules/contrib/mail/mimemail/includes/mimemail.admin.inc +++ b/sites/all/modules/contrib/mail/mimemail/includes/mimemail.admin.inc @@ -85,7 +85,7 @@ function mimemail_admin_settings() { '#access' => count($formats) > 1, '#attributes' => array('class' => array('filter-list')), '#description' => t('The filter set that will be applied to the message body. - If you are using Mime Mail as default mail sytem, make sure to enable + If you are using Mime Mail as default mail system, make sure to enable "Convert line breaks into HTML" and "Convert URLs into links" with a long enough maximum length for e.g. password reset URLs!'), ); diff --git a/sites/all/modules/contrib/mail/mimemail/includes/mimemail.incoming.inc b/sites/all/modules/contrib/mail/mimemail/includes/mimemail.incoming.inc index ff1d43f7..43f98eb4 100644 --- a/sites/all/modules/contrib/mail/mimemail/includes/mimemail.incoming.inc +++ b/sites/all/modules/contrib/mail/mimemail/includes/mimemail.incoming.inc @@ -75,13 +75,13 @@ function mimemail_parse($message) { // We're dealing with a multi-part message. $mail['parts'] = mimemail_parse_boundary($mail); - foreach ($mail['parts'] as $i => $part_body) { + foreach ($mail['parts'] as $part_body) { $part = mimemail_parse_headers($part_body); $sub_parts = mimemail_parse_boundary($part); // Content is encoded in a multipart/alternative section. if (count($sub_parts) > 1) { - foreach ($sub_parts as $j => $sub_part_body) { + foreach ($sub_parts as $sub_part_body) { $sub_part = mimemail_parse_headers($sub_part_body); if ($sub_part['content-type'] == 'text/plain') { $mail['text'] = mimemail_parse_content($sub_part); diff --git a/sites/all/modules/contrib/mail/mimemail/includes/mimemail.mail.inc b/sites/all/modules/contrib/mail/mimemail/includes/mimemail.mail.inc index 04774faa..28bebfc8 100644 --- a/sites/all/modules/contrib/mail/mimemail/includes/mimemail.mail.inc +++ b/sites/all/modules/contrib/mail/mimemail/includes/mimemail.mail.inc @@ -29,7 +29,6 @@ class MimeMailSystem implements MailSystemInterface { } $engine = variable_get('mimemail_engine', 'mimemail'); - $mailengine = $engine . '_mailengine'; $engine_prepare_message = $engine . '_prepare_message'; if (function_exists($engine_prepare_message)) { diff --git a/sites/all/modules/contrib/mail/mimemail/mimemail.inc b/sites/all/modules/contrib/mail/mimemail/mimemail.inc index 3dbb0052..dd7847ff 100644 --- a/sites/all/modules/contrib/mail/mimemail/mimemail.inc +++ b/sites/all/modules/contrib/mail/mimemail/mimemail.inc @@ -112,7 +112,7 @@ function mimemail_headers($headers, $from = NULL) { * ) */ function mimemail_extract_files($html) { - $pattern = '/(]+href=[\'"]?|]+codebase=[\'"]?|@import |[\s]src=[\'"]?)([^\'>"]+)([\'"]?)/mis'; + $pattern = '/(]+href=[\'"]?|]+codebase=[\'"]?|@import (?:url\()?[\'"]?|[\s]src=[\'"]?)([^\'>")]+)([\'"]?)/mis'; $content = preg_replace_callback($pattern, '_mimemail_replace_files', $html); $encoding = '8Bit'; @@ -177,7 +177,7 @@ function _mimemail_file($url = NULL, $content = NULL, $name = '', $type = '', $d $url = _mimemail_url($url, 'TRUE'); // The $url is absolute, we're done here. $scheme = file_uri_scheme($url); - if ($scheme == 'http' || $scheme == 'https' || preg_match('!mailto:!', $url)) { + if ($scheme == 'http' || $scheme == 'https' || preg_match('!mailto:!', $url) || preg_match('!^data:!', $url)) { return $url; } // The $url is a non-local URI that needs to be converted to a URL. @@ -209,11 +209,11 @@ function _mimemail_file($url = NULL, $content = NULL, $name = '', $type = '', $d $type = $is_file ? file_get_mimetype($file) : file_get_mimetype($name); } - $id = md5($file) .'@'. $_SERVER['HTTP_HOST']; + $id = md5($file) . '@' . $_SERVER['HTTP_HOST']; // Prevent duplicate items. if (isset($ids[$id])) { - return 'cid:'. $ids[$id]; + return 'cid:' . $ids[$id]; } $new_file = array( @@ -449,7 +449,6 @@ function mimemail_html_body($body, $subject, $plain = FALSE, $plaintext = NULL, * A processed URL. */ function _mimemail_url($url, $to_embed = NULL) { - global $base_url; $url = urldecode($url); $to_link = variable_get('mimemail_linkonly', 0); @@ -541,7 +540,6 @@ function mimemail_address($address, $simplify = FALSE) { if (is_array($address)) { // It's an array containing 'mail' and/or 'name'. if (isset($address['mail'])) { - $output = ''; if (empty($address['name']) || $simplify) { return $address['mail']; } diff --git a/sites/all/modules/contrib/mail/mimemail/mimemail.info b/sites/all/modules/contrib/mail/mimemail/mimemail.info index 2d5d028f..4261e872 100644 --- a/sites/all/modules/contrib/mail/mimemail/mimemail.info +++ b/sites/all/modules/contrib/mail/mimemail/mimemail.info @@ -14,9 +14,13 @@ files[] = tests/mimemail.test files[] = tests/mimemail_rules.test files[] = tests/mimemail_compress.test -; Information added by Drupal.org packaging script on 2015-08-02 -version = "7.x-1.0-beta4" +; Modules needed for testing +test_dependencies[] = rules +test_dependencies[] = entity +test_dependencies[] = entity_token + +; Information added by Drupal.org packaging script on 2018-10-17 +version = "7.x-1.1" core = "7.x" project = "mimemail" -datestamp = "1438530555" - +datestamp = "1539793390" diff --git a/sites/all/modules/contrib/mail/mimemail/mimemail.module b/sites/all/modules/contrib/mail/mimemail/mimemail.module index 21164b8b..084e5ae4 100644 --- a/sites/all/modules/contrib/mail/mimemail/mimemail.module +++ b/sites/all/modules/contrib/mail/mimemail/mimemail.module @@ -35,6 +35,10 @@ function mimemail_menu() { */ function mimemail_permission() { return array( + 'view mimemail user settings' => array( + 'title' => t('View Mime Mail user settings'), + 'description' => t('View user specific settings for Mime Mail.'), + ), 'edit mimemail user settings' => array( 'title' => t('Edit Mime Mail user settings'), 'description' => t('Edit user specific settings for Mime Mail.'), @@ -85,6 +89,7 @@ function mimemail_user_view($account, $view_mode, $langcode) { $account->content['mimemail'] = array( '#type' => 'user_profile_category', '#title' => t('Email'), + '#access' => user_access('view mimemail user settings'), ); $account->content['mimemail']['textonly'] = array( @@ -247,7 +252,9 @@ function mimemail_mailengine($op, $message = array()) { $result = TRUE; foreach ($recipients as $to) { - if (isset($return_path) && !empty($return_path)) { + // We validate the return path, unless it is equal to the site mail, which + // we assume to be safe. + if (isset($return_path) && !empty($return_path) && (variable_get('site_mail', ini_get('sendmail_from')) === $return_path || mimemail_isshellsafe($return_path))) { if (isset($_SERVER['WINDIR']) || strpos($_SERVER['SERVER_SOFTWARE'], 'Win32') !== FALSE) { // On Windows, PHP will use the value of sendmail_from for the // Return-Path header. @@ -359,7 +366,7 @@ function mimemail_prepare_message($message) { $hook = array( 'mimemail_message__' . $key, - 'mimemail_message__' . $module .'__'. $key, + 'mimemail_message__' . $module . '__' . $key, ); $variables = array( @@ -367,10 +374,13 @@ function mimemail_prepare_message($message) { 'key' => $key, 'recipient' => $to, 'subject' => $subject, - 'body' => $body + 'body' => $body, + 'message' => $message ); - $body = theme($hook, $variables); + if (!$plain) { + $body = theme($hook, $variables); + } foreach (module_implements('mail_post_process') as $module) { $function = $module . '_mail_post_process'; @@ -390,3 +400,22 @@ function mimemail_prepare_message($message) { return $message; } + +/** + * Disallows potentially unsafe shell characters. + * + * @param string $string + * The string to be validated. + * + * @return bool + * True if the string is shell-safe. + */ +function mimemail_isshellsafe($string) { + if (escapeshellcmd($string) !== $string || !in_array(escapeshellarg($string), array("'$string'", "\"$string\""))) { + return FALSE; + } + if (preg_match('/[^a-zA-Z0-9@_\-.]/', $string) !== 0) { + return FALSE; + } + return TRUE; +} diff --git a/sites/all/modules/contrib/mail/mimemail/mimemail.rules.inc b/sites/all/modules/contrib/mail/mimemail/mimemail.rules.inc index 29a6dee5..53716e31 100644 --- a/sites/all/modules/contrib/mail/mimemail/mimemail.rules.inc +++ b/sites/all/modules/contrib/mail/mimemail/mimemail.rules.inc @@ -32,35 +32,40 @@ function mimemail_rules_action_info() { 'label' => t('CC Recipient'), 'description' => t("The mail's carbon copy address. You may separate multiple addresses with comma."), 'optional' => TRUE, + 'allow null' => TRUE, ), 'bcc' => array( 'type' => 'text', 'label' => t('BCC Recipient'), 'description' => t("The mail's blind carbon copy address. You may separate multiple addresses with comma."), 'optional' => TRUE, + 'allow null' => TRUE, ), 'from_name' => array( 'type' => 'text', 'label' => t('Sender name'), 'description' => t("The sender's name. Leave it empty to use the site-wide configured name."), 'optional' => TRUE, + 'allow null' => TRUE, ), 'from_mail' => array( 'type' => 'text', 'label' => t('Sender e-mail address'), 'description' => t("The sender's address. Leave it empty to use the site-wide configured address."), 'optional' => TRUE, + 'allow null' => TRUE, ), 'reply_to' => array( 'type' => 'text', 'label' => t('Reply e-mail address'), 'description' => t("The address to reply to. Leave it empty to use the sender's address."), 'optional' => TRUE, + 'allow null' => TRUE, ), 'list_unsubscribe' => array( 'type' => 'text', 'label' => t('Unsubscription e-mail and/or URL'), - 'description' => t("An e-mail address and/or a URL which can be used for unsubscription. Values must be enclosed by angel brackets and separated by a comma."), + 'description' => t("An e-mail address and/or a URL which can be used for unsubscription. Values must be enclosed by angle brackets and separated by a comma."), 'optional' => TRUE, ), 'subject' => array( @@ -100,6 +105,12 @@ function mimemail_rules_action_info() { 'default mode' => 'selector', ), ), + 'provides' => array( + 'send_status' => array( + 'type' => 'boolean', + 'label' => t('Send status'), + ), + ), 'base' => 'rules_action_mimemail', 'access callback' => 'rules_system_integration_access', ), @@ -120,7 +131,7 @@ function mimemail_rules_action_info() { ), 'active' => array( 'type' => 'boolean', - 'label' =>('Send to active users'), + 'label' => t('Send to active users'), 'description' => t('Send mail only to active users.'), ), 'from_name' => array( @@ -128,12 +139,21 @@ function mimemail_rules_action_info() { 'label' => t('Sender name'), 'description' => t("The sender's name. Leave it empty to use the site-wide configured name."), 'optional' => TRUE, + 'allow null' => TRUE, ), 'from_mail' => array( 'type' => 'text', 'label' => t('Sender e-mail address'), 'description' => t("The sender's address. Leave it empty to use the site-wide configured address."), 'optional' => TRUE, + 'allow null' => TRUE, + ), + 'reply_to' => array( + 'type' => 'text', + 'label' => t('Reply e-mail address'), + 'description' => t("The address to reply to. Leave it empty to use the sender's address."), + 'optional' => TRUE, + 'allow null' => TRUE, ), 'subject' => array( 'type' => 'text', @@ -176,6 +196,12 @@ function mimemail_rules_action_info() { 'default mode' => 'selector', ), ), + 'provides' => array( + 'send_status' => array( + 'type' => 'boolean', + 'label' => t('Send status'), + ), + ), 'base' => 'rules_action_mimemail_to_users_of_role', 'access callback' => 'rules_system_integration_access', ), @@ -279,13 +305,15 @@ function rules_action_mimemail($key, $to, $cc = NULL, $bcc = NULL, $from_name = 'attachments' => $attachments, ); - drupal_mail('mimemail', $key, $to, $language, $params, $from); + $message = drupal_mail('mimemail', $key, $to, $language, $params, $from); + + return array('send_status' => !empty($message['result'])); } /** * Action: Send HTML mail to all users of a specific role group(s). */ -function rules_action_mimemail_to_users_of_role($key, $roles, $active, $from_name = NULL, $from_mail = NULL, $subject, $body, $plaintext = NULL, $attachments = array(), $use_userlang = FALSE, $langcode= NULL, $settings, RulesState $state, RulesPlugin $element) { +function rules_action_mimemail_to_users_of_role($key, $roles, $active, $from_name = NULL, $from_mail = NULL, $reply_to = NULL, $subject, $body, $plaintext = NULL, $attachments = array(), $use_userlang = FALSE, $langcode= NULL, $settings, RulesState $state, RulesPlugin $element) { module_load_include('inc', 'mimemail'); // Set the sender name and from address. @@ -326,6 +354,7 @@ function rules_action_mimemail_to_users_of_role($key, $roles, $active, $from_nam 'action' => $element, 'state' => $state, ), + 'reply-to' => $reply_to, 'plaintext' => $plaintext, 'attachments' => $attachments, ); @@ -352,6 +381,8 @@ function rules_action_mimemail_to_users_of_role($key, $roles, $active, $from_nam $role_names = array_intersect_key(user_roles(TRUE), array_flip($roles)); watchdog('rules', 'Successfully sent HTML email to the role(s) %roles.', array('%roles' => implode(', ', $role_names))); } + + return array('send_status' => !empty($message['result'])); } /** diff --git a/sites/all/modules/contrib/mail/mimemail/modules/mimemail_action/mimemail_action.info b/sites/all/modules/contrib/mail/mimemail/modules/mimemail_action/mimemail_action.info index e6ede6a8..479d443d 100644 --- a/sites/all/modules/contrib/mail/mimemail/modules/mimemail_action/mimemail_action.info +++ b/sites/all/modules/contrib/mail/mimemail/modules/mimemail_action/mimemail_action.info @@ -6,9 +6,8 @@ dependencies[] = trigger core = 7.x -; Information added by Drupal.org packaging script on 2015-08-02 -version = "7.x-1.0-beta4" +; Information added by Drupal.org packaging script on 2018-10-17 +version = "7.x-1.1" core = "7.x" project = "mimemail" -datestamp = "1438530555" - +datestamp = "1539793390" diff --git a/sites/all/modules/contrib/mail/mimemail/modules/mimemail_action/mimemail_action.module b/sites/all/modules/contrib/mail/mimemail/modules/mimemail_action/mimemail_action.module index 5ad51d61..9d690d1f 100644 --- a/sites/all/modules/contrib/mail/mimemail/modules/mimemail_action/mimemail_action.module +++ b/sites/all/modules/contrib/mail/mimemail/modules/mimemail_action/mimemail_action.module @@ -26,7 +26,8 @@ function mimemail_send_email_action($entity, $context) { if (empty($context['node'])) { if (get_class($entity) == 'OgMembership') { $context['user'] = user_load($entity->etid); - } else { + } + else { $context['node'] = $entity; } } diff --git a/sites/all/modules/contrib/mail/mimemail/modules/mimemail_compress/mimemail_compress.inc b/sites/all/modules/contrib/mail/mimemail/modules/mimemail_compress/mimemail_compress.inc index dcf3f0aa..ad5432e8 100644 --- a/sites/all/modules/contrib/mail/mimemail/modules/mimemail_compress/mimemail_compress.inc +++ b/sites/all/modules/contrib/mail/mimemail/modules/mimemail_compress/mimemail_compress.inc @@ -32,7 +32,7 @@ class mimemail_compress { private $css = ''; private $unprocessable_tags = array('wbr'); - public function mimemail_compress($html = '', $css = '') { + public function __construct($html = '', $css = '') { $this->html = $html; $this->css = $css; } @@ -144,7 +144,7 @@ class mimemail_compress { $node->setAttribute('style', $style); // Convert float to align for images. - $float = preg_match ('/float:(left|right)/', $style, $matches); + $float = preg_match('/float:(left|right)/', $style, $matches); if ($node->nodeName == 'img' && $float) { $node->setAttribute('align', $matches[1]); $node->setAttribute('vspace', 5); @@ -196,6 +196,23 @@ class mimemail_compress { return $precedence; } + /** + * Replace callback function that matches ID attributes. + */ + private static function replace_id_attributes($m) { + return (strlen($m[1]) ? $m[1] : '*') . '[@id="' . $m[2] . '"]'; + } + + /** + * Replace callback function that matches class attributes. + */ + private static function replace_class_attributes($m) { + return (strlen($m[1]) ? $m[1] : '*') . + '[contains(concat(" ",normalize-space(@class)," "),concat(" ","' . + implode('"," "))][contains(concat(" ",normalize-space(@class)," "),concat(" ","', explode('.', substr($m[2], 1))) . + '"," "))]'; + } + /** * Right now we only support CSS 1 selectors, but include CSS2/3 selectors are fully possible. * @@ -206,6 +223,7 @@ class mimemail_compress { // Already an XPath expression. return $selector; } + // Returns an Xpath selector. $search = array( '/\s+>\s+/', // Matches any F element that is a child of an element E. @@ -213,8 +231,6 @@ class mimemail_compress { '/\s+/', // Matches any F element that is a descendant of an E element. '/(\w)\[(\w+)\]/', // Matches element with attribute. '/(\w)\[(\w+)\=[\'"]?(\w+)[\'"]?\]/', // Matches element with EXACT attribute. - '/(\w+)?\#([\w\-]+)/e', // Matches id attributes. - '/(\w+|\*)?((\.[\w\-]+)+)/e', // Matches class attributes. ); $replace = array( '/', @@ -222,10 +238,13 @@ class mimemail_compress { '//', '\\1[@\\2]', '\\1[@\\2="\\3"]', - "(strlen('\\1') ? '\\1' : '*').'[@id=\"\\2\"]'", - "(strlen('\\1') ? '\\1' : '*').'[contains(concat(\" \",normalize-space(@class),\" \"),concat(\" \",\"'.implode('\",\" \"))][contains(concat(\" \",normalize-space(@class),\" \"),concat(\" \",\"',explode('.',substr('\\2',1))).'\",\" \"))]'", ); - return '//' . preg_replace($search, $replace, trim($selector)); + + $result = preg_replace($search, $replace, trim($selector)); + $result = preg_replace_callback('/(\w+)?\#([\w\-]+)/', 'mimemail_compress::replace_id_attributes', $result); + $result = preg_replace_callback('/(\w+|\*)?((\.[\w\-]+)+)/', 'mimemail_compress::replace_class_attributes', $result); + + return '//' . $result; } private function css_style_to_array($style) { diff --git a/sites/all/modules/contrib/mail/mimemail/modules/mimemail_compress/mimemail_compress.info b/sites/all/modules/contrib/mail/mimemail/modules/mimemail_compress/mimemail_compress.info index 4733b214..45f24e22 100644 --- a/sites/all/modules/contrib/mail/mimemail/modules/mimemail_compress/mimemail_compress.info +++ b/sites/all/modules/contrib/mail/mimemail/modules/mimemail_compress/mimemail_compress.info @@ -6,9 +6,8 @@ core = 7.x files[] = mimemail_compress.inc -; Information added by Drupal.org packaging script on 2015-08-02 -version = "7.x-1.0-beta4" +; Information added by Drupal.org packaging script on 2018-10-17 +version = "7.x-1.1" core = "7.x" project = "mimemail" -datestamp = "1438530555" - +datestamp = "1539793390" diff --git a/sites/all/modules/contrib/mail/mimemail/modules/mimemail_example/mimemail_example.info b/sites/all/modules/contrib/mail/mimemail/modules/mimemail_example/mimemail_example.info index 649bc3a6..af8bf6b6 100644 --- a/sites/all/modules/contrib/mail/mimemail/modules/mimemail_example/mimemail_example.info +++ b/sites/all/modules/contrib/mail/mimemail/modules/mimemail_example/mimemail_example.info @@ -4,9 +4,8 @@ dependencies[] = mimemail package = Example modules core = 7.x -; Information added by Drupal.org packaging script on 2015-08-02 -version = "7.x-1.0-beta4" +; Information added by Drupal.org packaging script on 2018-10-17 +version = "7.x-1.1" core = "7.x" project = "mimemail" -datestamp = "1438530555" - +datestamp = "1539793390" diff --git a/sites/all/modules/contrib/mail/mimemail/tests/mimemail.test b/sites/all/modules/contrib/mail/mimemail/tests/mimemail.test index 5896a3c1..66198414 100644 --- a/sites/all/modules/contrib/mail/mimemail/tests/mimemail.test +++ b/sites/all/modules/contrib/mail/mimemail/tests/mimemail.test @@ -31,7 +31,7 @@ class MimeMailUnitTestCase extends DrupalUnitTestCase { $chars = array('-', '.', '+', '_'); $name = $this->randomString(); $local = $this->randomName() . $chars[array_rand($chars)] . $this->randomName(); - $domain = $this->randomName() . '-' . $this->randomName() . '.' . $this->randomName(rand(2,4)); + $domain = $this->randomName() . '-' . $this->randomName() . '.' . $this->randomName(rand(2, 4)); $headers = mimemail_headers(array(), "$name <$local@$domain>"); $result = $headers['Return-Path']; $expected = "<$local@$domain>"; @@ -47,7 +47,7 @@ class MimeMailUnitTestCase extends DrupalUnitTestCase { $expected = 'sites/default/files/styles/thumbnail/public/image.jpg'; $this->assertIdentical($result, $expected, 'Security token removed from styled image URL.'); - $expected = $url = 'public://' . $this->randomName() . ' '. $this->randomName() . '.' . $this->randomName(3); + $expected = $url = 'public://' . $this->randomName() . ' ' . $this->randomName() . '.' . $this->randomName(3); $result = _mimemail_url($url, TRUE); $this->assertIdentical($result, $expected, 'Space in the filename of the attachment left intact.'); } @@ -89,7 +89,7 @@ class MimeMailWebTestCase extends DrupalWebTestCase { array('mimemail_linkonly' => TRUE), t('Save configuration')); - $url = 'public://' . $this->randomName() . ' '. $this->randomName() . '.jpg'; + $url = 'public://' . $this->randomName() . ' ' . $this->randomName() . '.jpg'; $result = _mimemail_url($url, TRUE); $expected = str_replace(' ', '%20', file_create_url($url)); $message = 'Stream wrapper converted to web accessible URL for linked image.'; diff --git a/sites/all/modules/contrib/mail/mimemail/theme/mimemail.theme.inc b/sites/all/modules/contrib/mail/mimemail/theme/mimemail.theme.inc index 2a2df7cf..36dc8189 100644 --- a/sites/all/modules/contrib/mail/mimemail/theme/mimemail.theme.inc +++ b/sites/all/modules/contrib/mail/mimemail/theme/mimemail.theme.inc @@ -10,7 +10,7 @@ function mimemail_theme_theme() { return array( 'mimemail_message' => array( - 'variables' => array('module' => NULL, 'key' => NULL, 'recipient' => NULL, 'subject' => NULL, 'body' => NULL), + 'variables' => array('module' => NULL, 'key' => NULL, 'recipient' => NULL, 'subject' => NULL, 'body' => NULL, 'message' => array()), 'template' => 'mimemail-message', 'pattern' => 'mimemail_message__', 'file' => 'mimemail.theme.inc', @@ -36,7 +36,7 @@ function template_preprocess_mimemail_message(&$variables) { $themepath = drupal_get_path('theme', $theme); $sitestyle = variable_get('mimemail_sitestyle', 1); - $mailstyles = file_scan_directory($themepath, '#^mail\.css*$#'); + $mailstyles = file_scan_directory($themepath, '#^mail(-.+)?\.(c|le|sc|sa)ss$#'); // Check recursively for the existence of a mail.css file in the theme folder. if (!empty($mailstyles)) {