diff --git a/includes/mimemail.rules.inc b/includes/mimemail.rules.inc
index 94ffc1b..56b3bba 100644
--- a/includes/mimemail.rules.inc
+++ b/includes/mimemail.rules.inc
@@ -57,9 +57,6 @@ function mimemail_rules_action_mail_to_user($user, $settings) {
   // Prepare the message but not send.
   $message = drupal_mail('mimemail', 'rules_action_mail', $to, $language, $settings, $from, FALSE);
 
-  $format = variable_get('mimemail_format', FILTER_FORMAT_DEFAULT);
-  $message['body'] = check_markup($message['body'], $format, FALSE);
-
   // Send the prepared message.
   $message = mimemail(
     $message['from'],
@@ -119,9 +116,6 @@ function mimemail_rules_action_mail_to_users_of_role($settings) {
     // Prepare the message but not send.
     $message = drupal_mail('mimemail', 'rules_action_role_mail',  $account->mail, user_preferred_language($account), $settings, $from, FALSE);
 
-    $format = variable_get('mimemail_format', FILTER_FORMAT_DEFAULT);
-    $message['body'] = check_markup($message['body'], $format, FALSE);
-
     // Send the prepared message.
     $message = mimemail(
       $message['from'],
diff --git a/mimemail.module b/mimemail.module
index 5e18255..08f6a1b 100644
--- a/mimemail.module
+++ b/mimemail.module
@@ -115,13 +115,32 @@ function mimemail_mail($key, &$message, $params) {
 
   $message['to'] = strtr($message['to'], $variables);
   $message['subject'] = strtr($params['subject'], $variables);
-  $message['body'][] = strtr(filter_xss_admin($params['message_html']), $variables);
+  $message['body'] = strtr(filter_xss_admin($params['message_html']), $variables);
+
+  $format = variable_get('mimemail_format', FILTER_FORMAT_DEFAULT);
+  $message['body'] = check_markup($message['body'], $format, FALSE);
 
   $message['params']['plaintext'] = strtr($params['message_plaintext'], $variables);
   $message['params']['attachments'] = $attachments;
 }
 
 /**
+ * Implementation of hook_mail_alter().
+ *
+ * Run filters on plain text message to create HTML body.
+ */
+function mimemail_mail_alter(&$message) {
+  $smtp_library = variable_get('smtp_library', '');
+  $content_type = $message['headers']['Content-Type'];
+  $plain = isset($message['params']['plain']) ? $message['params']['plain'] : FALSE;
+
+  if (strpos($smtp_library, 'mimemail') !== FALSE && preg_match('/plain/', $content_type) && !$plain) {
+    $format = variable_get('mimemail_format', FILTER_FORMAT_DEFAULT);
+    $message['body'] = is_array($message['body']) ? check_markup(implode("\n\n", $message['body']), $format, FALSE) : check_markup($message['body'], $format, FALSE);
+  }
+}
+
+/**
  * Default engine's prepare function.
  *
  * @param
@@ -425,14 +444,7 @@ if (strpos(variable_get('smtp_library', ''), 'mimemail') !== FALSE
     $from = $message['from'];
     $to = $message['to'];
     $subject = $message['subject'];
-
-    if (preg_match('/plain/', $message['headers']['Content-Type'])) {
-      $format = variable_get('mimemail_format', FILTER_FORMAT_DEFAULT);
-      $body = check_markup($message['body'], $format, FALSE);
-    }
-    else {
-      $body = $message['body'];
-    }
+    $body = $message['body'];
 
     $plaintext = isset($message['plaintext']) ? $message['plaintext'] : NULL;
     $headers = isset($message['headers']) ? $message['headers'] : array();
