summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthomascube <thomas@roundcube.net>2008-02-04 17:39:06 +0000
committerthomascube <thomas@roundcube.net>2008-02-04 17:39:06 +0000
commit0ea884099afbe57b12faa29f2d676c44faa1cbf5 (patch)
treed3918bd19bf2ac24f54a991f5144c04e7ad36552
parentc708c9a67a8e32fdd67ca1eb7e807fa61fd125c4 (diff)
Make sending of read receipts configurable
-rw-r--r--CHANGELOG6
-rw-r--r--config/main.inc.php.dist4
-rw-r--r--program/localization/en_US/messages.inc2
-rw-r--r--program/steps/mail/func.inc72
-rw-r--r--program/steps/mail/sendmdn.inc79
-rw-r--r--program/steps/mail/show.inc15
6 files changed, 105 insertions, 73 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 8203ec5c6..87fd51ec2 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,11 +1,15 @@
CHANGELOG RoundCube Webmail
---------------------------
+2008/02/04 (thomasb)
+----------
+- Fix regular expression for checking e-mail address (#1484710)
+- Make sending of read receipts configurable
+
2008/02/02 (thomasb)
----------
- Always update $CONFIG with user prefs (#1484729)
- Don't ask for MDN confirmations on drafted messages (#1484691)
--
2008/01/31 (robin)
- Remember search results (closes #1483883), patch by the_glu
diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist
index fc7d28323..1ac688de7 100644
--- a/config/main.inc.php.dist
+++ b/config/main.inc.php.dist
@@ -176,6 +176,10 @@ $rcmail_config['read_when_deleted'] = TRUE;
// false causes deleted messages to be permanantly removed if there is no Trash folder
$rcmail_config['flag_for_deletion'] = TRUE;
+// Behavior if a received message requests a message delivery notification (read receipt)
+// 0 = ask the user, 1 = send automatically, 2 = ignore (never send or ask)
+$rcmail_config['mdn_requests'] = 0;
+
// Make use of the built-in spell checker. It is based on GoogieSpell.
// Since Google only accepts connections over https your PHP installatation
// requires to be compiled with Open SSL support
diff --git a/program/localization/en_US/messages.inc b/program/localization/en_US/messages.inc
index e69ac9db8..3576bf92f 100644
--- a/program/localization/en_US/messages.inc
+++ b/program/localization/en_US/messages.inc
@@ -74,7 +74,7 @@ $messages['copyerror'] = 'Could not copy any addresses';
$messages['sourceisreadonly'] = 'This address source is read only';
$messages['errorsavingcontact'] = 'Could not save the contact address';
$messages['movingmessage'] = 'Moving message...';
-$messages['receiptsent'] = 'Successfully send the receipt message';
+$messages['receiptsent'] = 'Successfully sent a read receipt';
$messages['errorsendingreceipt'] = 'Could not send the receipt';
?> \ No newline at end of file
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);
+ }
}