Перенос почтовых ящиков на другой домен в ispmanager 6
Скрипт migrate_mail_domain.sh позволит перенести все почтовые ящики с одного домена на другой в рамках ispmanager 6.
Для миграции ящиков выполните команду:
./migrate_mail_domain.sh all <текущий_домен> <новый_домен>
Также помимо параметра all, можно использовать другие шаги миграции по-отдельности:
discover- собрать список почтовых ящиков из базы данных панели ispmgr.db в CSV-файлcreate- создать одноименные почтовые ящики на новом домене с помощью mgrctl через функцию email.editmaildata- скопировать Maildir через команду rsync -a --delete, после чего передавать права на директорию новому владельцу через chowncreds- перенести хэши паролей (CRAM-MD5) из dovecot.passwd и ispmgr.dbverify- сравнить размеры старой и новой Maildirall- выполнить все шаги по-очереди
Процесс миграции записывается в журнал по пути /root/mail-migration-<текущий_домен>-<новый_домен>/migrate.log.
Принцип работы скрипта по шагам
discover
Скрипт считывает email и emaildomain из базы данных/usr/local/mgr5/etc/ispmgr.db, после чего создает CSV-файл со списком ящиков в рабочую директорию.
create
Скрипт для каждого почтового ящика из CSV-файла выполняет следующую команду:
mgrctl email.edit sok=ok name=... domainname=... passwd=... confirm=...
Для параметра passwd генерируется временный пароль, который будет заменен на существующий на шаге creds.
Этот шаг пропускается, если ящик уже существует на целевом (новом) домене.
maildata
Скрипт выполняет следующие шаги:
- Считывает пути Maildir из ispmgr.db для текущего и нового доменов
- Копирует все письма и удаляет те данные, которых нет источнике с помощью
rsync -a --delete - Считывает нового владельца почтовых ящиков
/etc/dovecot/dovecot.passwdи передает права на владение Maildir с помощьюchown -R
Sieve-скрипты (.dovecot.sieve и .sieve/) расположены в Maildir, поэтому переносятся автоматически.
creds
Скрипт выполняет следующие шаги:
- Считывает строку
user@old.domainиз/etc/dovecot/dovecot.passwd - Извлекает хэш пароля (второе поле
{CRAM-MD5}hex...) - С помощью
sedзаменяет значение в строкеuser@new.domainполученным хэшем - Копирует значения из поля
passwordкаждого текущего ящика в то же поле нового ящика - Выполняет бэкап с именем
dovecot.passwd.bak.<timestamp> - Записывает изменения
verify
Выводит таблицу сравнения размеров каждого ящика после миграции. Пример вывода:
[2026-09-08 04:34:12] >>> ================================================================
[2026-09-08 04:34:12] >>> STARTING STEP: verify
[2026-09-08 04:34:12] >>> ================================================================
[2026-09-08 04:34:12] Records in mailpaths.txt: 4
[2026-09-08 04:34:12]
Login | Old | New | Files O | Files N | Status
user1 | 7.8K | 7.8K | 19 | 19 | OK
user2 | 769 | 769 | 10 | 10 | OK
user3 | 696 | 696 | 9 | 9 | OK
user4 | 533 | 533 | 8 | 8 | OK
[2026-09-08 04:34:12]
[2026-09-08 04:34:12] ===== TOTALS =====
[2026-09-08 04:34:12] Matched: 4
[2026-09-08 04:34:12] Different: 0
[2026-09-08 04:34:12] Missing: 0
[2026-09-08 04:34:12]
[2026-09-08 04:34:12] Total old: 9.8K (46 files)
[2026-09-08 04:34:12] Total new: 9.8K (46 files)
[2026-09-08 04:34:12]
[2026-09-08 04:34:12] All mailboxes match.
[2026-09-08 04:34:12] <<< ================================================================
[2026-09-08 04:34:12] <<< FINISHED STEP: verify
[2026-09-08 04:34:12] <<< ================================================================
После миграции
Проверка IP-адреса домена
В файле /etc/exim4/domainips IP-адрес нового домена должен быть публичным: с приватным (например, 10.1.0.15) адресом отправка писем работать не будет.
Отключение IPv6
По умолчанию Exim пытается использовать IPv6-адрес для работы. Если на сервере нет публичного IPv6-адреса, необходимо отключить его использование в конфигурации Exim:
В начало файла /etc/exim4/exim4.conf.template добавьте строку:
disable_ipv6 = true
В начало файла /etc/exim/exim.conf добавьте строку:
disable_ipv6 = true
Проверка отправки писем
Отправьте любое письмо с ящика на новом домене на любой доступный внешний ящик и дождитесь доставки письма
Проверьте очередь Exim можно с помощью команды:
exim -bp
Отправить письмо принудительно можно командой:
exim -M <id-письма>