diff options
author | thomascube <thomas@roundcube.net> | 2008-02-04 17:39:06 +0000 |
---|---|---|
committer | thomascube <thomas@roundcube.net> | 2008-02-04 17:39:06 +0000 |
commit | 0ea884099afbe57b12faa29f2d676c44faa1cbf5 (patch) | |
tree | d3918bd19bf2ac24f54a991f5144c04e7ad36552 /program/steps/mail | |
parent | c708c9a67a8e32fdd67ca1eb7e807fa61fd125c4 (diff) |
Make sending of read receipts configurable
Diffstat (limited to 'program/steps/mail')
-rw-r--r-- | program/steps/mail/func.inc | 72 | ||||
-rw-r--r-- | program/steps/mail/sendmdn.inc | 79 | ||||
-rw-r--r-- | program/steps/mail/show.inc | 15 |
3 files changed, 95 insertions, 71 deletions
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index b508a1fcb..00de08c09 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -1318,6 +1318,78 @@ function rcmail_deliver_message(&$message, $from, $mailto) } +function rcmail_send_mdn($uid) +{ + global $CONFIG, $USER, $IMAP; + + $message = array('UID' => $uid); + $message['headers'] = $IMAP->get_headers($message['UID']); + $message['subject'] = rcube_imap::decode_mime_string($message['headers']->subject, $message['headers']->charset); + + if ($message['headers']->mdn_to && !$message['headers']->mdn_sent) + { + $identity = $USER->get_identity(); + $sender = format_email_recipient($identity['email'], $identity['name']); + $recipient = array_shift($IMAP->decode_address_list($message['headers']->mdn_to)); + $mailto = $recipient['mailto']; + + $compose = new rc_mail_mime(rcmail_header_delm()); + $compose->setParam(array( + 'text_encoding' => 'quoted-printable', + 'html_encoding' => 'quoted-printable', + 'head_encoding' => 'quoted-printable', + 'head_charset' => RCMAIL_CHARSET, + 'html_charset' => RCMAIL_CHARSET, + 'text_charset' => RCMAIL_CHARSET, + )); + + // compose headers array + $headers = array( + 'Date' => date('r'), + 'From' => $sender, + 'To' => $message['headers']->mdn_to, + 'Subject' => rcube_label('receiptread') . ': ' . $message['subject'], + 'Message-ID' => sprintf('<%s@%s>', md5(uniqid('rcmail'.rand(),true)), rcmail_mail_domain($_SESSION['imap_host'])), + 'X-Sender' => $identity['email'], + 'Content-Type' => 'multipart/report; report-type=disposition-notification', + ); + + if (!empty($CONFIG['useragent'])) + $headers['User-Agent'] = $CONFIG['useragent']; + + $body = rcube_label("yourmessage") . "\r\n\r\n" . + "\t" . rcube_label("to") . ': ' . rcube_imap::decode_mime_string($message['headers']->to, $message['headers']->charset) . "\r\n" . + "\t" . rcube_label("subject") . ': ' . $message['subject'] . "\r\n" . + "\t" . rcube_label("sent") . ': ' . format_date(strtotime($message['headers']->date), $CONFIG['date_long']) . "\r\n" . + "\r\n" . rcube_label("receiptnote") . "\r\n"; + + $ua = !empty($CONFIG['useragent']) ? $CONFIG['useragent'] : "RoundCube Webmail (Version ".RCMAIL_VERSION.")"; + $report = "Reporting-UA: $ua\r\n"; + + if ($message['headers']->to) + $report .= "Original-Recipient: {$message['headers']->to}\r\n"; + + $report .= "Final-Recipient: rfc822; {$identity['email']}\r\n" . + "Original-Message-ID: {$message['headers']->messageID}\r\n" . + "Disposition: manual-action/MDN-sent-manually; displayed\r\n"; + + $compose->headers($headers, true); + $compose->setTXTBody($body); + $compose->addAttachment($report, 'message/disposition-notification', 'MDNPart2.txt', false, '7bit', 'inline'); + + $sent = rcmail_deliver_message($compose, $identity['email'], $mailto); + + if ($sent) + { + $IMAP->set_flag($message['UID'], 'MDNSENT'); + return true; + } + } + + return false; +} + + // register UI objects $OUTPUT->add_handlers(array( 'mailboxlist' => 'rcmail_mailbox_list', diff --git a/program/steps/mail/sendmdn.inc b/program/steps/mail/sendmdn.inc index 0944e7602..530dcac4c 100644 --- a/program/steps/mail/sendmdn.inc +++ b/program/steps/mail/sendmdn.inc @@ -5,7 +5,7 @@ | program/steps/mail/sendmdn.inc | | | | This file is part of the RoundCube Webmail client | - | Copyright (C) 2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | | PURPOSE: | @@ -22,76 +22,19 @@ require_once('lib/rc_mail_mime.inc'); -if (!empty($_POST['_uid'])) - { - $MESSAGE = array('UID' => get_input_value('_uid', RCUBE_INPUT_POST)); - $MESSAGE['headers'] = $IMAP->get_headers($MESSAGE['UID']); - $MESSAGE['subject'] = rcube_imap::decode_mime_string($MESSAGE['headers']->subject, $MESSAGE['headers']->charset); - - if ($MESSAGE['headers']->mdn_to && !$MESSAGE['headers']->mdn_sent) - { - $identity = $USER->get_identity(); - $sender = format_email_recipient($identity['email'], $identity['name']); - $recipient = array_shift($IMAP->decode_address_list($MESSAGE['headers']->mdn_to)); - $mailto = $recipient['mailto']; - - $COMPOSE = new rc_mail_mime(rcmail_header_delm()); - $COMPOSE->setParam(array( - 'text_encoding' => 'quoted-printable', - 'html_encoding' => 'quoted-printable', - 'head_encoding' => 'quoted-printable', - 'head_charset' => RCMAIL_CHARSET, - 'html_charset' => RCMAIL_CHARSET, - 'text_charset' => RCMAIL_CHARSET, - )); - - // compose headers array - $headers = array( - 'Date' => date('r'), - 'From' => $sender, - 'To' => $MESSAGE['headers']->mdn_to, - 'Subject' => rcube_label('receiptread') . ': ' . $MESSAGE['subject'], - 'Message-ID' => sprintf('<%s@%s>', md5(uniqid('rcmail'.rand(),true)), rcmail_mail_domain($_SESSION['imap_host'])), - 'X-Sender' => $identity['email'], - 'Content-Type' => 'multipart/report; report-type=disposition-notification', - ); - - if (!empty($CONFIG['useragent'])) - $headers['User-Agent'] = $CONFIG['useragent']; - - $body = rcube_label("yourmessage") . "\r\n\r\n" . - "\t" . rcube_label("to") . ': ' . rcube_imap::decode_mime_string($MESSAGE['headers']->to, $MESSAGE['headers']->charset) . "\r\n" . - "\t" . rcube_label("subject") . ': ' . $MESSAGE['subject'] . "\r\n" . - "\t" . rcube_label("sent") . ': ' . format_date(strtotime($MESSAGE['headers']->date), $CONFIG['date_long']) . "\r\n" . - "\r\n" . rcube_label("receiptnote") . "\r\n"; - - $report = "Reporting-UA: RoundCube Webmail (Version ".RCMAIL_VERSION.")\r\n"; - - if ($MESSAGE['headers']->to) - $report .= "Original-Recipient: {$MESSAGE['headers']->to}\r\n"; - - $report .= "Final-Recipient: rfc822; {$identity['email']}\r\n" . - "Original-Message-ID: {$MESSAGE['headers']->messageID}\r\n" . - "Disposition: manual-action/MDN-sent-manually; displayed\r\n"; - - $COMPOSE->headers($headers, true); - $COMPOSE->setTXTBody($body); - $COMPOSE->addAttachment($report, 'message/disposition-notification', 'MDNPart2.txt', false, '7bit', 'inline'); - - $sent = rcmail_deliver_message($COMPOSE, $identity['email'], $mailto); +if (!empty($_POST['_uid'])) { + $sent = rcmail_send_mdn(get_input_value('_uid', RCUBE_INPUT_POST)); +} - if ($sent) - { - $IMAP->set_flag($MESSAGE['UID'], 'MDNSENT'); - $OUTPUT->set_env('mdn_request', false); - $OUTPUT->show_message('receiptsent', 'confirmation'); - $OUTPUT->send(); - } - } +// show either confirm or error message +if ($sent) { + $OUTPUT->set_env('mdn_request', false); + $OUTPUT->show_message('receiptsent', 'confirmation'); +} +else { + $OUTPUT->show_message('errorsendingreceipt', 'error'); } -// Error if arrive here -$OUTPUT->show_message('errorsendingreceipt', 'error'); $OUTPUT->send(); ?>
\ No newline at end of file diff --git a/program/steps/mail/show.inc b/program/steps/mail/show.inc index e6aa19270..2f0fb015d 100644 --- a/program/steps/mail/show.inc +++ b/program/steps/mail/show.inc @@ -5,7 +5,7 @@ | program/steps/mail/show.inc | | | | This file is part of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | | PURPOSE: | @@ -20,6 +20,7 @@ */ require_once('Mail/mimeDecode.php'); +require_once('lib/rc_mail_mime.inc'); $PRINT_MODE = $_action=='print' ? TRUE : FALSE; @@ -76,8 +77,16 @@ if ($_GET['_uid']) // check for unset disposition notification if ($MESSAGE['headers']->mdn_to && !$MESSAGE['headers']->mdn_sent && $IMAP->get_mailbox_name() != $CONFIG['drafts_mbox']) { - rcube_add_label('mdnrequest'); - $OUTPUT->set_env('mdn_request', true); + if (intval($CONFIG['mdn_requests']) === 1) + { + if (rcmail_send_mdn($MESSAGE['UID'])) + $OUTPUT->show_message('receiptsent', 'confirmation'); + } + else if (empty($CONFIG['mdn_requests'])) + { + rcube_add_label('mdnrequest'); + $OUTPUT->set_env('mdn_request', true); + } } |