diff --git a/mimemail.module b/mimemail.module
index 8b42fa7d35d8ed26603fc8e81bb50d123a3595f0..8ec0ded355fdb512f8f9334c823d45bda738243b 100644
--- a/mimemail.module
+++ b/mimemail.module
@@ -146,6 +146,7 @@ function mimemail_mail($key, &$message, $params) {
  *   The $message array structure containing all details of the message.
  */
 function mimemail_prepare_message($sender, $recipient, $subject, $body, $plaintext = NULL, $headers = array(), $text = NULL, $attachments = array(), $mailkey = '') {
+  global $language;
   module_load_include('inc', 'mimemail');
 
   $site_name = variable_get('site_name', 'Drupal');
@@ -189,6 +190,15 @@ function mimemail_prepare_message($sender, $recipient, $subject, $body, $plainte
       }
     }
   }
+  // To have the user's preferred language used in templates and preprocess
+  // we need to change the global $language object
+  if(is_object($recipient) && $recipient->language !== $language->language) {
+    // Save the current language
+    $language_original = $language;
+    // Pick up the user preferred language object.
+    $language = user_preferred_language($recipient);
+  }
+
   $subject = str_replace("\n", '', trim(drupal_html_to_text($subject)));
   $body = theme(array('mimemail_message__'. $mailkey, 'mimemail_message'), $subject, $body, $mailkey, $recipient);
   foreach (module_implements('mail_post_process') as $module) {
@@ -209,6 +219,11 @@ function mimemail_prepare_message($sender, $recipient, $subject, $body, $plainte
     'headers' => mimemail_headers($headers, $sender),
   );
 
+  // Return the original language object
+  if(isset($language_original)) {
+    $language = $language_original;
+  }
+
   return $message;
 }
 
