From c1a99c30a52a274ecf767e7feee23fbfee581e03 Mon Sep 17 00:00:00 2001
From: Kristiaan Van den Eynde <magentix@gmail.com>
Date: Thu, 10 Dec 2015 16:46:19 +0100
Subject: [PATCH] Issue #2605612 by Angry Dan, kristiaanvandeneynde: Log
 "original" message

---
 includes/maillog.mail.inc | 49 +++++++++++++++++++++++++++++++----------------
 1 file changed, 33 insertions(+), 16 deletions(-)

diff --git a/includes/maillog.mail.inc b/includes/maillog.mail.inc
index ad30769..17c6fc2 100644
--- a/includes/maillog.mail.inc
+++ b/includes/maillog.mail.inc
@@ -4,6 +4,10 @@
  * An interface for pluggable mail back-ends.
  */
 class MaillogMailSystem implements MailSystemInterface {
+
+
+  protected $original_message;
+
   /**
    * Format a message composed by drupal_mail() prior sending.
    *
@@ -14,6 +18,15 @@ class MaillogMailSystem implements MailSystemInterface {
    *   The formatted $message.
    */
   public function format(array $message) {
+    if (variable_get('maillog_log_original', FALSE)) {
+      $default = new DefaultMailSystem();
+      $this->original_message = $default->format($message);
+
+      if (module_exists('reroute_email') && variable_get('reroute_email_enable', FALSE) && isset($this->original_message['headers']['X-Rerouted-Original-To'])) {
+        $this->original_message['to'] = $this->original_message['headers']['X-Rerouted-Original-To'];
+      }
+    }
+
     $mailclass = variable_get('maillog_engine', 'DefaultMailSystem');
     $default = new $mailclass();
     return $default->format($message);
@@ -45,33 +58,37 @@ class MaillogMailSystem implements MailSystemInterface {
    *   TRUE if the mail was successfully accepted for delivery, otherwise FALSE.
    */
   public function mail(array $message) {
+    $message_to_log = $message;
+    if (variable_get('maillog_log_original', FALSE)) {
+      $message_to_log = $this->original_message;
+    }
     // Log the e-mail
     if (variable_get('maillog_log', TRUE)) {
       $record = new stdClass;
 
       // In case the subject/from/to is already encoded, decode with mime_header_decode
-      $record->header_message_id = isset($message['headers']['Message-ID']) ? $message['headers']['Message-ID'] : NULL;
-      $record->subject = $message['subject'];
+      $record->header_message_id = isset($message_to_log['headers']['Message-ID']) ? $message_to_log['headers']['Message-ID'] : NULL;
+      $record->subject = $message_to_log['subject'];
       $record->subject = mime_header_decode($record->subject);
-      $record->body = $message['body'];
-      $record->header_from = isset($message['from']) ? $message['from'] : NULL;
+      $record->body = $message_to_log['body'];
+      $record->header_from = isset($message_to_log['from']) ? $message_to_log['from'] : NULL;
       $record->header_from = mime_header_decode($record->header_from);
 
       $header_to = array();
-      if (isset($message['to'])) {
-        if (is_array($message['to'])) {
-          foreach($message['to'] as $value) {
+      if (isset($message_to_log['to'])) {
+        if (is_array($message_to_log['to'])) {
+          foreach($message_to_log['to'] as $value) {
             $header_to[] = mime_header_decode($value);
           }
         }
         else {
-          $header_to[] = mime_header_decode($message['to']);
+          $header_to[] = mime_header_decode($message_to_log['to']);
         }
       }
       $record->header_to = implode(', ', $header_to);
 
-      $record->header_reply_to = isset($message['headers']['Reply-To']) ? $message['headers']['Reply-To'] : '';
-      $record->header_all = serialize($message['headers']);
+      $record->header_reply_to = isset($message_to_log['headers']['Reply-To']) ? $message_to_log['headers']['Reply-To'] : '';
+      $record->header_all = serialize($message_to_log['headers']);
       $record->sent_date = REQUEST_TIME;
 
       drupal_write_record('maillog', $record);
@@ -80,12 +97,12 @@ class MaillogMailSystem implements MailSystemInterface {
     // Display the e-mail using Devel module
     if (variable_get('maillog_devel', TRUE) && function_exists('dpm')) {
       $devel_msg = array();
-      $devel_msg[t('Subject')] = $message['subject'];
-      $devel_msg[t('From')] = $message['from'];
-      $devel_msg[t('To')] = $message['to'];
-      $devel_msg[t('Reply-To')] = isset($message['reply_to']) ? $message['reply_to'] : NULL;
-      $devel_msg[t('Header')] = $message['headers'];
-      $devel_msg[t('Body')] = $message['body'];
+      $devel_msg[t('Subject')] = $message_to_log['subject'];
+      $devel_msg[t('From')] = $message_to_log['from'];
+      $devel_msg[t('To')] = $message_to_log['to'];
+      $devel_msg[t('Reply-To')] = isset($message_to_log['reply_to']) ? $message_to_log['reply_to'] : NULL;
+      $devel_msg[t('Header')] = $message_to_log['headers'];
+      $devel_msg[t('Body')] = $message_to_log['body'];
 
       dpm($devel_msg, 'maillog');
     }
-- 
2.4.9 (Apple Git-60)

