При влюченной отладке imap в sogo: S[0x5649de0f3640]: 4 OK Namespace completed (0.001 + 0.040 + 0.039 secs). C[0x5649de0d5d30]: 5 LIST "" "" S[0x5649de0f3640]: * LIST (\Noselect) "/" "" S[0x5649de0f3640]: 5 OK List completed (0.001 + 0.040 + 0.039 secs). C[0x5649de0d5d30]: 6 create "INBOX/&BD8EMAQ/BDA-" S[0x5649de0f3640]: 6 NO Mailbox name is not valid mUTF-7 (0.001 + 0.000 secs). Другие папки на русском создаются нормально. При этом созданные через imap папки с "пап" в названии так же не видны через activesync.
В общем проблема в том как sogo отдает название папки dovecot'у. Создал папку пап через imap, имя у нее в mUTF-7: INBOX/&BD8EMAQ,- А sogo как видно из первого сообщения пытается создать "INBOX/&BD8EMAQ/BDA-"
Проблема внутри SOGo: папки показываются криво и не создаются, если третьей буквой идёт "п". Например, не создаётся папка "Репка". Созданные в Thunderbird папки показываются в SOGo как "Паӿка".
More observations at: https://sogo.nu/bugs/view.php?id=4308
Коллеги, просьба, если можно, не переключать язык комментариев — если начали по-русски — продолжать по-русски. И наоборот. Спасибо!
По-моему, понятно, что это и как это легко теперь исправить. В sope неправильная реализация mUTF-7 -- https://tools.ietf.org/html/rfc3501#section-5.1.3 ! Собственно, далеко ходить за демонстрацией не надо. В багрепорте: C[0x5649de0d5d30]: 6 create "INBOX/&BD8EMAQ/BDA-" S[0x5649de0f3640]: 6 NO Mailbox name is not valid mUTF-7 (0.001 + 0.000 secs). а должно быть: "INBOX/&BD8EMAQ,BDA-" (Если separator = . (по умолчанию бывает) , а не / как в этом примере (мне так больше нравится вообще), картина затуманивается ещё и преобразованием внутреннего / в SOGo в .) А в обратную сторону: откуда берётся этот смешной знак вместо трёх кириллических букв? В base64 (а следом и в UTF7 и mUTF7) по одному знаку на 6 бит. В UTF7 это 6 бит из строки кодов Unicode (не UTF8), если упростить. Три буквы, которые превращаются не в ту, имеют единицы в последних 6 бит своего кода Unicode. (Заполнить первые 2 бита -- 4 варианта, это эти три буквы, включая "п", и то, во что они превращаются.) 6 бит единиц -- самый большой знак в base64, как раз "/". В правильном mUTF7 вместо него ",". А sope об этом не знает. Запятая -- недопустимый знак для него, и там в таблице в коде стоит -1. Вот и превращение во все единицы. Из-за ошибки получается необычно (для нашего представления о позиционной записи): последний младший знак переписывает (своими единицами) то, что дал предыдущий старший знак.
Похоже, проблема неправильной кодировки в libsope: sope-mime/NGImap4/NSString+Imap4.m:- (NSString *)stringByEncodingImap4FolderName {
Точнее, в функции _encodeToModifiedUTF7() в том же файле
Да, это место я исправляю. Жаль, что сразу патч не показал, чтоб было ясно сразу.
sope-3.2.10-alt2 -> sisyphus: Mon Oct 09 2017 Ivan Zakharyaschev <imz@altlinux.org> 3.2.10-alt2 - mUTF7 corrections (RFC3501) for non-ASCII IMAP folder names (ALT: #33722, #32426)
(In reply to comment #4) > Коллеги, просьба, если можно, не переключать язык комментариев — если начали > по-русски — продолжать по-русски. И наоборот. Да, это разумный принцип, и я его стараюсь придерживаться обычно, а иногда незаметно для себя нарушаю.