From 232535f76e50c08e77d8cba599fabe7fe8ca42d4 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Wed, 02 Jan 2013 13:25:07 -0500
Subject: [PATCH] Add option to use envelope From address for MDN responses (#1488880)

---
 program/lib/Roundcube/rcube_smtp.php |    3 ++-
 CHANGELOG                            |    1 +
 program/steps/mail/func.inc          |    5 ++++-
 config/main.inc.php.dist             |    4 ++++
 4 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index d3ebabc..8b26fbc 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG Roundcube Webmail
 ===========================
 
+- Add option to use envelope From address for MDN responses (#1488880)
 - Add possibility to search in message body only (#1488770)
 - Support "multipart/relative" as an alias for "multipart/related" type (#1488886)
 - Display PGP/MIME signature attachments as "Digital Signature" (#1488570)
diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist
index 20b8795..e6cb9fd 100644
--- a/config/main.inc.php.dist
+++ b/config/main.inc.php.dist
@@ -353,6 +353,10 @@
 // send plaintext messages as format=flowed
 $rcmail_config['send_format_flowed'] = true;
 
+// According to RFC2298, return receipt envelope sender address must be empty.
+// If this option is true, Roundcube will use user's identity as envelope sender for MDN responses.
+$rcmail_config['mdn_use_from'] = false;
+
 // Set identities access level:
 // 0 - many identities with possibility to edit all params
 // 1 - many identities with possibility to edit all params but not email address
diff --git a/program/lib/Roundcube/rcube_smtp.php b/program/lib/Roundcube/rcube_smtp.php
index 79ffcfb..5c7d220 100644
--- a/program/lib/Roundcube/rcube_smtp.php
+++ b/program/lib/Roundcube/rcube_smtp.php
@@ -227,7 +227,8 @@
         }
 
         // RFC2298.3: remove envelope sender address
-        if (preg_match('/Content-Type: multipart\/report/', $text_headers)
+        if (empty($opts['mdn_use_from'])
+            && preg_match('/Content-Type: multipart\/report/', $text_headers)
             && preg_match('/report-type=disposition-notification/', $text_headers)
         ) {
             $from = '';
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index 44a1557..f82e60a 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -1687,6 +1687,9 @@
     if ($agent = $RCMAIL->config->get('useragent'))
       $headers['User-Agent'] = $agent;
 
+    if ($RCMAIL->config->get('mdn_use_from'))
+      $options['mdn_use_from'] = true;
+
     $body = rcube_label("yourmessage") . "\r\n\r\n" .
       "\t" . rcube_label("to") . ': ' . rcube_mime::decode_mime_string($message->headers->to, $message->headers->charset) . "\r\n" .
       "\t" . rcube_label("subject") . ': ' . $message->subject . "\r\n" .
@@ -1708,7 +1711,7 @@
     $compose->setTXTBody(rc_wordwrap($body, 75, "\r\n"));
     $compose->addAttachment($report, 'message/disposition-notification', 'MDNPart2.txt', false, '7bit', 'inline');
 
-    $sent = rcmail_deliver_message($compose, $identity['email'], $mailto, $smtp_error, $body_file);
+    $sent = rcmail_deliver_message($compose, $identity['email'], $mailto, $smtp_error, $body_file, $options);
 
     if ($sent)
     {

--
Gitblit v1.9.1