LINUX.ORG.RU
ФорумAdmin

sieve проблемы с папками на кирилице

 ,


1

1

Поставил и настроит почтовый сервер Exim4 + Dovecot, в качестве интерфейса roundcube. В качестве фильтра поставил sieve.
В принципе работает, но фильтр не работает на папки которые в кирилице. На латинице, все работает.
В логах имею такую ошибку:

sieve: info: started log at Sep 18 00:51:30.
error: msgid=<ca32333a76e4dfb0d2def89233aed29d@XXX.ru>: failed to store into mailbox 'INBOX.&BCEEMwQ+BDwEPg9BEw-': Mailbox doesn't exist: INBOX.&BCEEMwQ+BDwEPg9BEw-.

Подскажите куда копать.


Кодировки/локали?

&BCEEMwQ+BDwEPg9BEw-

Это не похоже на base64(1), который обычно используется для конверсии non-ASCII.

mord0d ★★★★★
()
Ответ на: комментарий от iliaxxx

Вот создал папку с названиеп «папка» и на нее фильтр сделал. В логах:

[code]sieve: info: started log at Sep 18 10:24:19. error: msgid=dbed2461850567cbe277fff892bc551e@sgomon.ru: failed to store into mailbox ‘INBOX.&BB8EMAQ,BDoEMA-’: Mailbox doesn’t exist: INBOX.&BB8EMAQ,BDoEMA-.[/code]

Как я понял их создает сам dovecot. А sieve их не понимает. :(

iliaxxx
() автор топика
Последнее исправление: iliaxxx (всего исправлений: 1)
Ответ на: комментарий от iliaxxx

Тут ничем помочь не могу, у меня никогда не было кириллических имён в почте.

mord0d ★★★★★
()
Ответ на: комментарий от vel

модифицированный вариант UTF-7

Дичь!

забавная вещь :)

Дикая!

rfc 2060

Нафейхоа? Хотя да, юзеры ж не умеют. (%

mord0d ★★★★★
()
Ответ на: комментарий от iliaxxx

Писать багрепорт, или еще проще - самому пропатчить :)

RC c cyrus-imap так же нерабочий вариант

sieve runtime error for xxxx id <f429282f-80b3-9bfd-be69-3c02131bba7a@xxxxx>: Fileinto (Черновики): Mailbox does not exist

managesieve в roundcubemail вообще не знает про требование к кодировке имен каталогов :)

Но если подставить правильное имя, то работает!

# rule:[bebe]
if header :contains "subject" "aaaaaaaaa"
{
        fileinto "&BCcENQRABD0EPgQyBDgEOgQ4-";
        stop;
}
переносит в Черновики

vel ★★★★★
()
Ответ на: комментарий от iliaxxx

Ну тогда ещё вариант:
INBOX.&BCEEMwQ+BDwEPg9BEw-
!=
&BCEEMwQ+BDwEPg9BEw-

anc ★★★★★
()
Ответ на: комментарий от anc

В cyrus-imap оно в таком виде.

У меня есть специальный 'ls' - cyr_ls, который показывает список каталогов.

#!/usr/bin/env perl
use strict;
use utf8;

use Encode::IMAPUTF7;
use Encode qw/encode decode/;
use locale;
no warnings 'utf8';

foreach my $A ($#ARGV >= 0 ? @ARGV:"./") {
        next if ! -d $A;
        my @L;
        my $lmax = 0;
        opendir(my $dh, $A) || die "Can't open $A: $!";
        @L = grep {(! -d "$A/$_" || $_ eq '.' || $_ eq '..') ? undef:$_} readdir($dh);
        closedir $dh;
        map { $lmax = length($_) if length($_) > $lmax; tr/^/./;} @L;
        my $fmt = sprintf("%%%ds %%s\n",$lmax);
        foreach (@L) {
                printf($fmt,$_,decode('IMAP-UTF-7',$_));
        }
}
vel ★★★★★
()
Ответ на: комментарий от anc

А какой плагин у тебя для sieve?

managesieve (version 9.3) позволяет выбрать каталог, но пишет его без преобразования.

vel ★★★★★
()
Ответ на: комментарий от vel

managesieve, но точно какой версии не скажу. Взял его с дистрибутива roundcube 1.4.11. С оф сайта. Пробовал с версий ниже, то же самое.

iliaxxx
() автор топика
Ответ на: комментарий от vel

Я не очень селен с почтой. Где мне это прописать?

#!/usr/bin/env perl
use strict;
use utf8;

use Encode::IMAPUTF7;
use Encode qw/encode decode/;
use locale;
no warnings 'utf8';

foreach my $A ($#ARGV >= 0 ? @ARGV:"./") {
        next if ! -d $A;
        my @L;
        my $lmax = 0;
        opendir(my $dh, $A) || die "Can't open $A: $!";
        @L = grep {(! -d "$A/$_" || $_ eq '.' || $_ eq '..') ? undef:$_} readdir($dh);
        closedir $dh;
        map { $lmax = length($_) if length($_) > $lmax; tr/^/./;} @L;
        my $fmt = sprintf("%%%ds %%s\n",$lmax);
        foreach (@L) {
                printf($fmt,$_,decode('IMAP-UTF-7',$_));
        }
}

iliaxxx
() автор топика
Ответ на: комментарий от iliaxxx

Это консольный скрипт который показывает имена каталогов в человеческом виде.

vel ★★★★★
()
Ответ на: комментарий от iliaxxx

Судя по отсутствию utf7imap_to_utf8() и utf8_to_utf7imap() в коде managesieve - автор не знает про кодировку каталогов :(

vel ★★★★★
()
Ответ на: комментарий от vel

Может у кого есть рабочая сборка managesieve?

iliaxxx
() автор топика
Ответ на: комментарий от vel

А ему оно надо? Я в том плане, что может этим rc занимается?

anc ★★★★★
()
Ответ на: комментарий от anc

Если верить Changelog из managesieve, то

version 7.2 [2014-02-14]

А у тебя имя каталога нужно указывать строкой или в виде выпадающего списка?

vel ★★★★★
()
Ответ на: комментарий от iliaxxx

Вот спасибо!

UTF7-IMAP решило мою проблему.

&BCEEMwQ+BDwEPg9BEw- Сгомоཁ

imho имя каталога странное

ты уверен, что оно сущестует?

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от vel

UTF7-IMAP Я и это уже в конфиге прописывал, не помогает. В упор не хочет перемещать в эту папку.

$config['managesieve_mbox_encoding'] = 'UTF7-IMAP';

iliaxxx
() автор топика
Ответ на: комментарий от iliaxxx

Может я какой то момент упустил в кнфиге? managesieve/config.inc.php

<?php

// managesieve server port. When empty the port will be determined automatically
// using getservbyname() function, with 4190 as a fallback.
$config['managesieve_port'] = 4190;

// managesieve server address, default is localhost.
// Replacement variables supported in host name:
// %h - user's IMAP hostname
// %n - http hostname ($_SERVER['SERVER_NAME'])
// %d - domain (http hostname without the first part)
// For example %n = mail.domain.tld, %d = domain.tld
$config['managesieve_host'] = 'localhost';

// authentication method. Can be CRAM-MD5, DIGEST-MD5, PLAIN, LOGIN, EXTERNAL
// or none. Optional, defaults to best method supported by server.
$config['managesieve_auth_type'] = null;

// Optional managesieve authentication identifier to be used as authorization proxy.
// Authenticate as a different user but act on behalf of the logged in user.
// Works with PLAIN and DIGEST-MD5 auth.
$config['managesieve_auth_cid'] = null;

// Optional managesieve authentication password to be used for imap_auth_cid
$config['managesieve_auth_pw'] = null;

// use or not TLS for managesieve server connection
// Note: tls:// prefix in managesieve_host is also supported
$config['managesieve_usetls'] = false;

// Connection scket context options
// See http://php.net/manual/en/context.ssl.php
// The example below enables server certificate validation
//$config['managesieve_conn_options'] = array(
//  'ssl'         => array(
//     'verify_peer'  => true,
//     'verify_depth' => 3,
//     'cafile'       => '/etc/openssl/certs/ca.crt',
//   ),
// );
// Note: These can be also specified as an array of options indexed by hostname
$config['managesieve_conn_options'] = null;

// default contents of filters script (eg. default spam filter)
$config['managesieve_default'] = '/etc/dovecot/sieve/global';

// The name of the script which will be used when there's no user script
$config['managesieve_script_name'] = 'managesieve';

// Sieve RFC says that we should use UTF-8 endcoding for mailbox names,
// but some implementations does not covert UTF-8 to modified UTF-7.
// Defaults to UTF7-IMAP
$config['managesieve_mbox_encoding'] = 'UTF7-IMAP';

// I need this because my dovecot (with listescape plugin) uses
// ':' delimiter, but creates folders with dot delimiter
$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
$config['managesieve_disabled_extensions'] = array();

// Enables debugging of conversation with sieve server. Logs it into <log_dir>/sieve
$config['managesieve_debug'] = false;

// Enables features described in http://wiki.kolab.org/KEP:14
$config['managesieve_kolab_master'] = false;

// Script name extension used for scripts including. Dovecot uses '.sieve',
// Cyrus uses '.siv'. Doesn't matter if you have managesieve_kolab_master disabled.
$config['managesieve_filename_extension'] = '.sieve';

// List of reserved script names (without extension).
// Scripts listed here will be not presented to the user.
$config['managesieve_filename_exceptions'] = array();

// List of domains limiting destination emails in redirect action
// If not empty, user will need to select domain from a list
$config['managesieve_domains'] = array();

// Enables separate management interface for vacation responses (out-of-office)
// 0 - no separate section (default),
// 1 - add Vacation section,
// 2 - add Vacation section, but hide Filters section
$config['managesieve_vacation'] = 0;

// Default vacation interval (in days).
// Note: If server supports vacation-seconds extension it is possible
// to define interval in seconds here (as a string), e.g. "3600s".
$config['managesieve_vacation_interval'] = 0;

// Some servers require vacation :addresses to be filled with all
// user addresses (aliases). This option enables automatic filling
// of these on initial vacation form creation.
$config['managesieve_vacation_addresses_init'] = false;

// Sometimes you want to always reply with mail email address
// This option enables automatic filling of :from field on initial vacation form creation.
$config['managesieve_vacation_from_init'] = false;

// Supported methods of notify extension. Default: 'mailto'
$config['managesieve_notify_methods'] = array('mailto');

// Enables scripts RAW editor feature
$config['managesieve_raw_editor'] = true;

iliaxxx
() автор топика
Последнее исправление: iliaxxx (всего исправлений: 1)
Ответ на: комментарий от iliaxxx

У меня все понимал, когда я использовал - это у тебя что-то кривое

Физически папка

INBOX.&BCEEMwQ+BDwEPg9BEw-

на сервере есть?

zgen ★★★★★
()
Ответ на: комментарий от iliaxxx

Все, тема закрыта. Вот рабочий конфиг managesieve/config.inc.php

$config['managesieve_port'] = 4190;
$config['managesieve_host'] = 'localhost';
$config['managesieve_auth_type'] = null;
$config['managesieve_auth_cid'] = null;
$config['managesieve_auth_pw'] = null;
$config['managesieve_usetls'] = false;
$config['managesieve_default'] = '/etc/dovecot/sieve/global';
$config['managesieve_script_name'] = 'managesieve';
$config['managesieve_replace_delimiter'] = '';
$config['managesieve_disabled_extensions'] = array();
$config['managesieve_debug'] = true;
$config['managesieve_kolab_master'] = false;
$config['managesieve_filename_extension'] = '.sieve';
$config['managesieve_filename_exceptions'] = array();
$config['managesieve_domains'] = array();
$config['managesieve_vacation'] = 1;
$config['managesieve_notify_methods'] = array('mailto');

iliaxxx
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.