| | |
| | | * It's clickable interface which operates on text scripts and communicates |
| | | * with server using managesieve protocol. Adds Filters tab in Settings. |
| | | * |
| | | * @version 1.1 |
| | | * @version 1.6 |
| | | * @author Aleksander 'A.L.E.C' Machniak <alec@alec.pl> |
| | | * |
| | | * Configuration (main.inc.php): |
| | | |
| | | // managesieve server port |
| | | $rcmail_config['managesieve_port'] = 2000; |
| | | |
| | | // managesieve server address |
| | | $rcmail_config['managesieve_host'] = 'localhost'; |
| | | |
| | | // use or not TLS for managesieve server connection |
| | | // it's because I've problems with TLS and dovecot's managesieve plugin |
| | | // and it's not needed on localhost |
| | | $rcmail_config['managesieve_usetls'] = false; |
| | | |
| | | // default contents of filters script (eg. default spam filter) |
| | | $rcmail_config['managesieve_default'] = '/etc/dovecot/sieve/global'; |
| | | |
| | | // I need this because my dovecot (with listescape plugin) uses |
| | | // ':' delimiter, but creates folders with dot delimiter |
| | | $rcmail_config['managesieve_replace_delimiter'] = ''; |
| | | |
| | | // disabled sieve extensions (body, copy, date, editheader, encoded-character, |
| | | // envelope, environment, ereject, fileinto, ihave, imap4flags, index, |
| | | // mailbox, mboxmetadata, regex, reject, relational, servermetadata, |
| | | // spamtest, spamtestplus, subaddress, vacation, variables, virustest, etc. |
| | | // Note: not all extensions are implemented |
| | | $rcmail_config['managesieve_disabled_extensions'] = array(); |
| | | |
| | | * Configuration (see config.inc.php.dist): |
| | | */ |
| | | |
| | | class managesieve extends rcube_plugin |
| | |
| | | { |
| | | $rcmail = rcmail::get_instance(); |
| | | $this->rc = &$rcmail; |
| | | |
| | | $this->load_config(); |
| | | |
| | | // register UI objects |
| | | $this->rc->output->add_handlers(array( |
| | |
| | | foreach ($headers as $hr) |
| | | if (!preg_match('/^[a-z0-9-]+$/i', $hr)) |
| | | $this->errors['tests'][$i]['header'] = $this->gettext('forbiddenchars'); |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (empty($this->errors['tests'][$i]['header'])) |
| | | $cust_header = $headers; |
| | | $cust_header = (is_array($headers) && count($headers) == 1) ? $headers[0] : $headers; |
| | | |
| | | if ($type == 'exists') |
| | | { |
| | |
| | | $a_folders = $this->rc->imap->list_mailboxes(); |
| | | $delimiter = $this->rc->imap->get_hierarchy_delimiter(); |
| | | |
| | | // set mbox encoding |
| | | $mbox_encoding = $this->rc->config->get('managesieve_mbox_encoding', 'UTF7-IMAP'); |
| | | |
| | | if ($action['type'] == 'fileinto') |
| | | $mailbox = $action['target']; |
| | | else |
| | |
| | | |
| | | foreach ($a_folders as $folder) |
| | | { |
| | | $utf7folder = $folder; |
| | | $utf7folder = $this->rc->imap->mod_mailbox($folder); |
| | | $names = explode($delimiter, rcube_charset_convert($folder, 'UTF7-IMAP')); |
| | | $name = $names[sizeof($names)-1]; |
| | | |
| | | if ($replace_delimiter = $this->rc->config->get('managesieve_replace_delimiter')) |
| | | $utf7folder = str_replace($delimiter, $replace_delimiter, $utf7folder); |
| | | |
| | | // convert to Sieve implementation encoding |
| | | $utf7folder = $this->mbox_encode($utf7folder, $mbox_encoding); |
| | | |
| | | if ($folder_class = rcmail_folder_classname($name)) |
| | | $foldername = $this->gettext($folder_class); |
| | |
| | | return false; |
| | | } |
| | | |
| | | private function mbox_encode($text, $encoding) |
| | | { |
| | | return rcube_charset_convert($text, 'UTF7-IMAP', $encoding); |
| | | } |
| | | } |
| | | |
| | | ?> |