- Added optional (max_recipients) support to restrict total number of recipients per message (#1484542)

release-0.6
alecpl 15 years ago
parent b14f829777
commit 751b22b41f

@ -1,6 +1,7 @@
CHANGELOG RoundCube Webmail CHANGELOG RoundCube Webmail
=========================== ===========================
- Added optional (max_recipients) support to restrict total number of recipients per message (#1484542)
- Re-organize editor buttons, add blockquote and search buttons - Re-organize editor buttons, add blockquote and search buttons
- Make possible to write inside or after a quoted html message (#1485476) - Make possible to write inside or after a quoted html message (#1485476)
- Fix bugs on unexpected IMAP connection close (#1486190, #1486270) - Fix bugs on unexpected IMAP connection close (#1486190, #1486270)

@ -180,6 +180,9 @@ $rcmail_config['password_charset'] = 'ISO-8859-1';
// How many seconds must pass between emails sent by a user // How many seconds must pass between emails sent by a user
$rcmail_config['sendmail_delay'] = 0; $rcmail_config['sendmail_delay'] = 0;
// Maximum number of recipients per message. Default: 0 (no limit)
$rcmail_config['max_recipients'] = 0;
// add this user-agent to message headers when sending // add this user-agent to message headers when sending
$rcmail_config['useragent'] = 'RoundCube Webmail/'.RCMAIL_VERSION; $rcmail_config['useragent'] = 'RoundCube Webmail/'.RCMAIL_VERSION;

@ -111,5 +111,6 @@ $messages['smtptoerror'] = 'SMTP Error ($code): Failed to add recipient "$to"';
$messages['smtprecipientserror'] = 'SMTP Error: Unable to parse recipients list'; $messages['smtprecipientserror'] = 'SMTP Error: Unable to parse recipients list';
$messages['smtperror'] = 'SMTP Error: $msg'; $messages['smtperror'] = 'SMTP Error: $msg';
$messages['emailformaterror'] = 'Incorrect e-mail address: $email'; $messages['emailformaterror'] = 'Incorrect e-mail address: $email';
$messages['toomanyrecipients'] = 'Too many recipients. Reduce the number of recipients to $max.';
?> ?>

@ -114,5 +114,6 @@ $messages['smtperror'] = 'Błąd SMTP: $msg';
$messages['invalidrequest'] = 'Błędne żądanie! Nie zapisano danych.'; $messages['invalidrequest'] = 'Błędne żądanie! Nie zapisano danych.';
$messages['emailformaterror'] = 'Błędny adres e-mail: $email'; $messages['emailformaterror'] = 'Błędny adres e-mail: $email';
$messages['notuploadedwarning'] = 'Nie wszystkie załączniki zostały pobrane. Poczekaj lub anuluj pobieranie.'; $messages['notuploadedwarning'] = 'Nie wszystkie załączniki zostały pobrane. Poczekaj lub anuluj pobieranie.';
$messages['toomanyrecipients'] = 'Zbyt wielu odbiorców. Zmniejsz ich liczbę do $max.';
?> ?>

@ -149,10 +149,10 @@ function rcmail_attach_emoticons(&$mime_message)
return $body; return $body;
} }
// parse email address input // parse email address input (and count addresses)
function rcmail_email_input_format($mailto) function rcmail_email_input_format($mailto, $count=false)
{ {
global $EMAIL_FORMAT_ERROR; global $EMAIL_FORMAT_ERROR, $RECIPIENT_COUNT;
$regexp = array('/[,;]\s*[\r\n]+/', '/[\r\n]+/', '/[,;]\s*$/m', '/;/', '/(\S{1})(<\S+@\S+>)/U'); $regexp = array('/[,;]\s*[\r\n]+/', '/[\r\n]+/', '/[,;]\s*$/m', '/;/', '/(\S{1})(<\S+@\S+>)/U');
$replace = array(', ', ', ', '', ',', '\\1 \\2'); $replace = array(', ', ', ', '', ',', '\\1 \\2');
@ -197,6 +197,10 @@ function rcmail_email_input_format($mailto)
} }
} }
if ($count) {
$RECIPIENT_COUNT += count($result);
}
return implode(', ', $result); return implode(', ', $result);
} }
@ -212,10 +216,11 @@ $input_charset = $OUTPUT->get_charset();
$message_charset = isset($_POST['_charset']) ? $_POST['_charset'] : $input_charset; $message_charset = isset($_POST['_charset']) ? $_POST['_charset'] : $input_charset;
$EMAIL_FORMAT_ERROR = NULL; $EMAIL_FORMAT_ERROR = NULL;
$RECIPIENT_COUNT = 0;
$mailto = rcmail_email_input_format(get_input_value('_to', RCUBE_INPUT_POST, TRUE, $message_charset)); $mailto = rcmail_email_input_format(get_input_value('_to', RCUBE_INPUT_POST, TRUE, $message_charset), true);
$mailcc = rcmail_email_input_format(get_input_value('_cc', RCUBE_INPUT_POST, TRUE, $message_charset)); $mailcc = rcmail_email_input_format(get_input_value('_cc', RCUBE_INPUT_POST, TRUE, $message_charset), true);
$mailbcc = rcmail_email_input_format(get_input_value('_bcc', RCUBE_INPUT_POST, TRUE, $message_charset)); $mailbcc = rcmail_email_input_format(get_input_value('_bcc', RCUBE_INPUT_POST, TRUE, $message_charset), true);
if ($EMAIL_FORMAT_ERROR) { if ($EMAIL_FORMAT_ERROR) {
$OUTPUT->show_message('emailformaterror', 'error', array('email' => $EMAIL_FORMAT_ERROR)); $OUTPUT->show_message('emailformaterror', 'error', array('email' => $EMAIL_FORMAT_ERROR));
@ -297,8 +302,17 @@ if (!empty($mailcc))
if (!empty($mailbcc)) if (!empty($mailbcc))
$headers['Bcc'] = $mailbcc; $headers['Bcc'] = $mailbcc;
if (!empty($identity_arr['bcc'])) if (!empty($identity_arr['bcc'])) {
$headers['Bcc'] = ($headers['Bcc'] ? $headers['Bcc'].', ' : '') . $identity_arr['bcc']; $headers['Bcc'] = ($headers['Bcc'] ? $headers['Bcc'].', ' : '') . $identity_arr['bcc'];
$RECIPIENT_COUNT ++;
}
if (($max_recipients = (int) $RCMAIL->config->get('max_recipients')) > 0) {
if ($RECIPIENT_COUNT > $max_recipients) {
$OUTPUT->show_message('toomanyrecipients', 'error', array('max' => $max_recipients));
$OUTPUT->send('iframe');
}
}
// add subject // add subject
$headers['Subject'] = trim(get_input_value('_subject', RCUBE_INPUT_POST, TRUE, $message_charset)); $headers['Subject'] = trim(get_input_value('_subject', RCUBE_INPUT_POST, TRUE, $message_charset));
@ -359,8 +373,7 @@ else
$headers = $data['headers']; $headers = $data['headers'];
$isHtmlVal = strtolower(get_input_value('_is_html', RCUBE_INPUT_POST)); $isHtml = (bool) get_input_value('_is_html', RCUBE_INPUT_POST);
$isHtml = ($isHtmlVal == "1");
// fetch message body // fetch message body
$message_body = get_input_value('_message', RCUBE_INPUT_POST, TRUE, $message_charset); $message_body = get_input_value('_message', RCUBE_INPUT_POST, TRUE, $message_charset);

Loading…
Cancel
Save