CommuniGate Pro
Version 6.3



Утилита syncIMAPMail

    syncIMAPMail это программа для копирования почтовых папок с письмами по протоколу IMAP.
    Её можно использовать для миграции между серверами, для создания копий аккаунтов внутри одного сервера, и для других целей.

    Программа копирует "инкрементально": она проверяет какие письма уже есть в папке назначения и копирует из источника только новые письма не создавая дубликатов, так что вы можете применять программу к одному аккаунту много раз. Программа быстрее других утилит копирования потому что она многопоточная: она может читать из источника и писать в приёмник одновременно; также она может читать несколько сообщений одним запросом, и писать несколько несколько собщений за раз если приёмник поддерживает расширение MULTIAPPEND протокола IMAP.


    Скачивание syncIMAPMail

    Операционная Система Процессор Скачать
    Windows x86
    Linux x86
    x86-64
    e2k
    FreeBSD 9+ x86
    MacOS X x86
    Sun Solaris Sparc

    Поддерживаются только избранные платформы. Программа syncIMAPMail работает по сети, то есть её не обязательно запускать на сервере источника или приёмника (хотя если так делать, то копировать будет быстрее).

    По вопросам техподдержки пишите на адрес support@old.communigatepro.ru.


    Параметры

    Синтаксис:
    syncIMAPMail [необязательные параметры] SrcServer[:port] srcUserName srcPassword DstServer[:port] dstUserName dstPassword
    Обязательные параметры:
    SrcServer
    Имя хоста или IP-адрес IMAP сервера-источника, опционально с номером порта.

    Внимание: программа не поддерживает шифрование SSL/TLS. Если оно требуется (например, для CGmail), используйте утилиту stunnel для создания прокси-соединения.

    srcUserName, srcPassword
    Значения для входа на сервер-источник (имя пользователя и пароль).

    Внимание: программа использует пароль открытым текстом, без SASL. Если источник и приёмник находятся в разных сетях и требуется "безопасность" - создайте VPN или используйте stunnel.

    DstServer
    Имя хоста или IP-адрес IMAP сервера-приёмника, опционально с номером порта.
    dstUserName, dstPassword
    Значения для входа на сервер-приёмник (имя пользователя и пароль).
    Пример:
    ./syncIMAPMail localhost:1143 user@company.com passw imap.company.com user@company.com passw
    Скопировать папки пользователя user@company.com с одного сервера на другой.
    Необязательные параметры:
    --verbose
    Включает подробное ведение журнала.
    --logfile file.txt
    Перенаправляет журнал в указанный файл.
    Пример:
    ./syncIMAPMail --verbose --logfile logs/$1.txt localhost:1143 $1 $2 imap.company.com $1 $2
    --list фильтр
    Строка фильтр используется для ограничения списка папок копируемого аккаунта.
    Пример:
    ./syncIMAPMail --list INBOX ...
    Скопировать только папку INBOX.

    Пример:
    ./syncIMAPMail --list "INBOX/*" ...
    Скопировать под-папки от папки INBOX, но не саму папку INBOX.

    Внимание: здесь и далее везде имена папок с не-латинскими символами должны быть указаны "как есть" в кодировке modified UTF-7.
    Пример:
    ./syncIMAPMail --list "&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-" ...
    Скопировать папку "Отправленные".
    --source префикс
    Строка префикс используется как 1-й параметр IMAP-команды LIST. Если имена папок, выдаваемые командой LIST, начинаются с заданного префикса, то префикс удаляется из имён папок, создаваемых на приёмнике.
    Этот параметр позволяет скопировать отдельное поддерево из иерархии папок аккаунта-источника в корень иерархии аккаунта-приёмника. Например, если источник содержит папки abc/box1 и abc/box2, то с параметром --source abc/ скопируются папки box1 и box2 в корень приёмника.
    Если источником является сервер CommuniGate Pro, то в качестве префикса можно использовать тильду и имя аккаунта, и таким образом от имени администратора можно скопировать папки другого пользователя : --source '~username/'
    См. ниже параметр --target.
    --target префикс
    Строка префикс добавляется ко всем именам папок на приёмнике.
    Если приёмником является сервер CommuniGate Pro, то в качестве префикса можно использовать тильду с именем аккаунта, и копировать в аккаунт, пароля которого вы не знаете, от имени администратора (аккаунта postmaster).

    Пример:
    ./syncIMAPMail --source ~user@company.com/ --target ~user@company.com/ 10.0.0.1 postmaster pass 10.0.0.2 postmaster pass
    Копировать все папки аккаунта user@company.com используя пароль postmaster-а.
    --skipMailbox имяПапки
    Не копировать указанную папку.
    имяПапки может содержать шаблоны (символы * и ?).
    Этот параметр можно использовать несколько раз, чтобы исключить несколько папок.
    --renameMailbox староеИмяПапки новоеИмяПапки
    Имя староеИмяПапки в источнике будет заменено на новоеИмяПапки на приёмнике.
    староеИмяПапки может содержать шаблоны (символы * и ?).
    Этот параметр можно использовать несколько раз, чтобы переименовать несколько папок.
    --mode режим
    Устанавливает режим синхронизации. Возможные режимы:
    syncSrcAll
    Копирует с источника сообщения, которые не существуют на приёмнике.

    Это режим по умолчанию. Используйте его для миграции.
    syncSrcNew
    Копирует только сообщения, которые новее самого нового сообщения на приёмнике.
    Автоматически подразумевается параметр "--list INBOX", но это может быть переопределено.

    Используйте этот режим если пользователь уже работает с сообщениями на приёмнике, но новые сообщения ещё доставляются на источник и требуется их копирование.
    syncDst
    Копирует сообщения с источника, которые не существуют на приёмнике.
    Копирует/синхронизирует флажки существующих сообщений.
    Удаляет сообщения с приёмника, которые не существуют на источнике.
    Удаляет папки (ящики) с приёмника, если они не существуют на источнике, если не указан параметр --list.
    Удаляет элементы подписки с приёмника, которые не существуют на источнике.

    Используйте этот режим когда пользователь работают на источнике, а приёмник используется как "зеркало".
    --notimeout
    тайм-аут операции IMAP увеличивается с 60 секунд до 1 часа. Используйте этот параметр когда копируете с очень медленного сервера.
    --noSubscription
    Выключает копирование подписки на папки.
    --noACL
    Выключает копирование прав доступа (Access Control Lists) папок.
    --noSpecialUse
    Выключает копирование атрибута папок SPECIAL-USE.
    --noForceIndex
    Выключает принудительное создание индексов. По умолчанию индексы принудительно создаются установкой и сбросом флажка на первом сообщении в папке.
    --noNewUID
    Выключает использование расширения IMAP для установки UID сообщений.
    Внимание: Это расширение работает только с CommuniGate Pro 6.1.9 и новее, поэтому ОБЯЗАТЕЛЬНО нужно использовать --noNewUID если приёмник не CommuniGate Pro, а какой-то другой сервер.
    --copyMailboxClass
    Может использоваться, если источником и приёмником являются серверы CommuniGate Pro; тогда будут копироваться папки не-почтовых классов ("Календарь", "Контакты", и т.д.)
    --proxyAuth username
    Использовать команду 'PROXYAUTH username' с источником.
    Используйте этот параметр чтобы войти на сервер-источник администратором и скопировать папки пользователя, пароля которого вы не знаете, если IMAP-сервер источника поддерживает команду PROXYAUTH.
    --srcAuthPlain username
    --dstAuthPlain username
    Использовать команду AUTHENICATE PLAIN для аутентификации на источнике или приёмнике.
    Используйте этот параметр чтобы войти на сервер от имени администратора и скопировать папки пользователя, пароля которого вы не знаете, если IMAP-сервер источника/приёмника поддерживает команду AUTHENICATE PLAIN.
    --srcOAuth2
    Использовать метод OAUTH2 для аутентификации на источнике.
    Параметр srcPassword должен быть именем файла, который содержит токен доступа.
    --fetchMax число
    Устанавливает максимальное число сообщений, скачиваемых с источника за один запрос. По умолчанию 50.
    --fetchSizeMax число
    Устанавливает максимальный размер сообщений, скачиваемый с источника за один запрос, в мегабайтах. По умолчанию 10.
    --storeMax число
    Устанавливает максимальное число сообщений, записываемых на приёмник за один запрос. По умолчанию 50.
    --storeSizeMax число
    Устанавливает максимальный размер сообщений, записываемых на приёмник за один запрос, в мегабайтах. По умолчанию 10.
    --queueMax число
    Устанавливает максимальное число сообщений, хранимых во внутренней очереди программы. По умолчанию 150.
    --queueSizeMax число
    Устанавливает максимальный размер сообщений, хранимых во внутренней очереди программы, в мегабайтах. По умолчанию 30.
    Можно использовать меньшие значения, если серверы медленные или мало памяти.
    --noThreads
    Выключает многопоточный режим.
    Используйте, если ваша ОС плохо справляется с многопоточностью.

    Замечания:
    Если имя папки на источнике начинается с символа . или ~, то на приёмнике имя папки будет начинаться с сиимвола _.
    Начальные и конечные пробелы, символы \ и # в именах папок на источнике заменяются на символы _ на приёмнике.
    Символы " заменяются на '.
    Если имя папки на источнике заканчивается на .mbox или .mdir или .mslc, то на приёмнике имя папки будет заканчиваться на соответственно -mbox или -mdir или -mslc.

    Замечания:
    Сообщения с флажком \Deleted не копируются.
    Если текст сообщения не заканчивается на EOL, то он автоматически добавляется.
    Строки сообщений длиннее 9000 байт автоматически обрезаются.


    Работа с множеством пользователей

    Предположим, имеется файл users.txt с именами аккаунтов и паролями, разделёных табуляцией. Тогда можно автоматизировать запуск программы для каждого аккаунта, используя скрипт.

    Пример на Bash:
    #!/bin/bash inFile="users.txt" logDir="logs" if [ ! -d $logDir ]; then mkdir $logDir fi while read line do read user pass <<<$(IFS=$'\t'; echo $line) echo "Syncing '$user'" eval ./syncIMAPMail --logfile $logDir/$user.txt 10.10.10.10 $user $pass 127.0.0.1 $user $pass done < "$inFile"
    Пример на Perl:
    #!/usr/bin/perl -w my $inFile="users.txt"; my $logDir="logs"; mkdir($logDir) unless(-d $logDir); open(F,$inFile) || die "can't open $inFile: $!"; while(<F>) { my($user,$pass)=split(/\s+/); print "Syncing '$user'\n"; system("./syncIMAPMail --logfile $logDir/$user.txt 10.10.10.10 $user $pass 127.0.0.1 $user $pass"); } close(F);
    Пример Windows файла BAT:
    @echo off SET inFile=users.txt SET logDir=logs IF NOT EXIST %logDir% mkdir %logDir% FOR /F "tokens=1,2" %%i in (%inFile%) do ( echo Syncing '%%i' syncIMAPMail --logfile %logDir%/%%i.txt 10.10.10.10 %%i %%j 127.0.0.1 %%i %%j )

    CommuniGate Pro Guide. Copyright © 2020, AO StalkerSoft