Шрифт
Перенос почты для домена с Google на Яндекс
Play

Перенос почты для домена с Google на Яндекс

В патриотическом порыве взвесив „за“ и „против“, в начале этого года перенёс почту в своём домене с Google на Яндекс. Зачем? Причины могут быть у каждого свои: может быть, вы любите ФСБ больше, чем NSA, вы не хотите платить Google за то, что Яндекс предлагает бесплатно, или вам просто нравится Яндекс… Для меня было важно следующее: 1. Более быстрая доставка почты от адресатов в России (Почтовые серверы Яндекса расположены в России) 2. Не заблокирован в Китае 3. Неограниченный объём почтового ящика (в бесплатной версии Google Apps – до 15 Gb) Цена сервиса меня в частности не волновала, т.к. Google Apps for Domain зарегистрировал ещё в те времена, когда было можно зарегистрировать бесплатную „семейную“ версию. Но сейчас это немаловажно, согласен. Так или иначе, вы решили перенести почту с Гугла на Яндекс. Как это сделать? Первым делом, составим план действий.

План перехода

А. Экспорт данных в почте Google для домена Б. Подключение домена к ПДД Яндекса В. Импорт данных в Яндекс Г. Завершение настройки почты в Яндексе Д*. Настройка EAS и Push-уведомлений для почты Теперь подробнее о том, что нужно сделать на каждом этапе.

А. Экспорт данных в почте Google для домена

1. Составить список активных почтовых ящиков и их alias′ов (псевдонимов) в почте Google для домена

Это поможет не потерять ни один из ящиков и воссоздать их впоследствии в ПДД (почта для домена) Яндекса.

2. Создать пароли приложений в Google

В настройках конфиденциальности Google создайте отдельные пароли приложений. Эти пароли нам понадобятся в дальнейшем для импорта данных во вновь созданные почтовые ящики Яндекса.

3. Экспортировать контакты

Контакты (адресную книгу) экспортируйте в файл vCard (.vcf) для последующего импорта в адресную книгу в учётной записи на Яндексе. Если Вы синхронизируете адресную книгу с устройствами на iOS или macOS, то лучше экспортировать контакты из приложения Контакты (Contacts). Тогда в экспортируемом файле будут сохранены все картинки (аватарки) пользователей. Прямой экспорт из Gmail картинки контактов не сохраняет.

4. Экспортировать календарь

Аналогично, в программе, работающей с календарями, экспортируйте календари из Google в формат vCalendar (.ics). Кроме того, экспортировать календарь можно и из Календаря Google в браузере. Теперь всё готово к подключению и настройке домена на Яндексе.

Б. Подключение домена к ПДД Яндекса

1. Подключить домен в ПДД Яндекса

Если вы ещё не имеете учётной записи на Яндексе, придётся её зарегистрировать, т.к. администрировать домен(ы) в ПДД Яндекса может только учётная запись @yandex.ru. На главной странице ПДД Яндекса добавьте ваш домен, и затем подтвердите право владения им.

2. Настроить записи MX

Если вы подключили домен к ПДД Яндекса, но не делегировали его на Яндекс, то потребуется установить MX-запись у вашего регистратора.

3. Выполнить проверку домена в ПДД Яндекса

Поддерживаются способы подтверждения владения доменом через загрузку файла на сайт, создание записи CNAME в DNS, либо делегирование домена на NS-серверы Яндекса. Последний способ хорош ещё и тем, что у Яндекса есть API для управления записями DNS.После вступления в силу изменений в записях DNS вы сможете создавать почтовые ящики в своём домене.

4. Создать почтовые ящики пользователей

Согласно списку, сделанному в п. А1, воссоздайте почтовые ящики пользователей и их алиасы (псевдонимы). Здесь же можно указать почтовый ящик, в который будут попадать письма, направленные на несуществующие ящики в домене.

Домен подключен к ПДД Яндекса 5. Попросить пользователей выполнить вход в каждый из созданных почтовых ящиков

Это позволит пользоваться почтой через почтовые программы, а не только через веб-интерфейс. На этой стадии новая почта приходит уже в почтовые ящики на Яндексе. Остаётся перенести в них старые данные, оставшиеся в почте Google.

В. Импорт данных в Яндекс

1. Закрыть почтовые программы, использующие старые ящики на Google

Это исключит изменения данных во время миграции почты.

2. Импортировать почту из старых ящиков

Используя созданные пароли приложений, импортируйте почту в новые ящики на Яндексе.

Начало импорта почты в ПДД Яндекса В моём случае импорт почты занял очень продолжительное время: более 15 часов для почтового ящика объёмом 10.7 Gb (11.6 тыс. сообщений).

Долгожданное окончание импорта почты в ПДД Яндекса

3. Импортировать календари и контакты

У Яндекса есть соответствующие сервисы – календарь и контакты (открываются из веб-интерфейса почты). Оба сервиса позволяют использовать контакты и календарь через открытые протоколы CardDAV и CalDAV, то есть контакты и календарь можно подключить на смартфоне, планшете или компьютере. * Сервер CardDAV у Яндекса плохо обрабатывает пакетный импорт (на момент миграции почты), поэтому лучше синхронизировать контакты по одному, например, в приложении Contacts. * Не забудьте отметить учётную запись Яндекса для сохранения контактов по умолчанию, иначе ваши вновь создаваемые на телефоне контакты будут попадать в другой сервис и не будут видны в почте.

4. Проверить результаты импорта

Перед следующим шагом откройте новый почтовый ящик, убедитесь, что перенесены все папки и письма из старого ящика.

5. Отключить пароли приложений в Google

После завершения миграции отключите пароли приложений. В них больше нет надобности.

Г. Завершение настройки почты в Яндексе

1. Установить новые записи SPF и DKIM в DNS

Чтобы почта на Яндексе работала правильно, а отправленные письма не попадали в спам, настройте SPF-запись и DKIM-подпись в DNS. Если вы делегировали домен на Яндекс, скорее всего эти записи будут настроены автоматически. Содержимое открытого ключа, которое должно быть указано в DKIM-записи, показывается один раз. Впоследствии его можно вызвать с помощью API ПДД через HTTP-запрос.

2. Поменять пароли для ящиков на Яндексе

И попросите об этом других пользователей после того, как они вошли в почту первый раз по первичным паролям, полученным при создании ящиков. Также не грех настроить и двухфакторную аутентификацию.

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

Почтовый ящик в Яндексе тоже умеет применять фильтры, цветовые метки к входящим сообщениям не хуже Google. Однако всё это придётся настроить вручную заново каждому из пользователей.

4. Обновить настройки SMTP для приложений

Если вы использовали какие-либо приложения, которые отправляли почту через SMTP Google (системные уведомления серверов, Wordpress и т.п.), теперь лучше переключить их на использование SMTP Яндекса, или воспользоваться сторонним API, например, SendGrid.

Д*. Настройка EAS и Push-уведомлений для почты

Хотите получать Push-уведомления для входящей почты, используя стандартное приложение Почта (Mail) в iOS/Android? Это реально, но потребует некоторой квалификации. Речь идёт о настройке Z-Push – open-source-реализации протокола Microsoft Exchange Active Sync (EAS) – на своём сервере. Для установки и настройки Z-Push понадобится собственный виртуальный сервер VPS/VDS или физический компьютер. Если у вас уже есть сайт, и он работает на общем (shared) хостинге, стоит задуматься о переносе его на VPS. Я уже давно использую DigitalOcean, и советую его всем, кому недостаточно возможностей shared-хостинга, и кто хочет „вырасти“ и иметь дополнительные возможности кроме работы веб-сайта.

1. Установка Z-Push

Как установить Z-Push, подробно расписано на странице Z-Push wiki. Действительно, Z-Push удобнее всего устанавливать из репозитория. Положим, у вас уже есть Droplet (VPS) на DigitalOcean с Ubuntu 16.04 LTS на борту, а также установлены nginx, php5.6-fpm (Z-Push ещё не поддерживает PHP 7.0) и memcached. Тогда процесс установки Z-Push будет выглядеть примерно так: Создаём файл /etc/apt/sources.list.d/z-push.list: sudo vi /etc/apt/sources.list.d/z-push.list Вносим туда строку и сохраняем файл: deb http://repo.z-hub.io/z-push:/final/Debian_8.0/ / Выполняем команду по добавлению ключа репозитория: wget -qO - http://repo.z-hub.io/z-push:/final/Debian_8.0/Release.key | sudo apt-key add - Обновляем список пакетов: sudo apt-get update Устанавливаем Z-Push: sudo apt-get install z-push-common z-push-backend-caldav z-push-backend-carddav z-push-backend-combined z-push-backend-imap z-push-backend-ldap z-push-backend-galsearch-ldap z-push-ipc-memcached z-push-ipc-sharedmemory z-push-state-sql z-push-autodiscover В один из файлов настройки php-fpm – /etc/php/5.6/fpm/pool.d/www.conf – добавляем для совместимости: ; Added for Z-Push compatibility php_flag[magic_quotes_gpc] = off php_flag[register_globals] = off php_flag[magic_quotes_runtime] = off php_flag[short_open_tag] = on php_admin_flag[safe_mode] = off

2. Настройка Z-Push

Конфигурационные файлы Z-Push при обычном способе установки расположены в директории /etc/z-push. Я приведу пример настройки, в котором оставлены только содержательные строки и удалены все комментарии, находившиеся в файлах после установки. Комментариями отмечены только те места, которые требуют внимания. Для начала отредактируем главный файл настроек /etc/z-push/z-push.conf.php: <?php // Часовой пояс define ( 'TIMEZONE' , 'Europe/Moscow'); define ( 'BASE_PATH' , dirname($_SERVER['SCRIPT_FILENAME']). '/'); define ( 'SCRIPT_TIMEOUT' , 0); define ( 'USE_X_FORWARDED_FOR_HEADER' , false); define ("CERTIFICATE_OWNER_PARAMETER", "SSL_CLIENT_S_DN_CN"); // Используем полный адрес e-mail для логина. Это нужно для авторизации в ПДД Яндекса: define ( 'USE_FULLEMAIL_FOR_LOGIN' , true); define ( 'STATE_MACHINE' , 'FILE'); // Адрес папки, в которой хранятся сведения о состоянии синхронизации. // Если папки нет, создайте её с правами 755 от имени пользователя веб-сервера define ( 'STATE_DIR' , '/var/lib/z-push/'); define ( 'IPC_PROVIDER' , 'IpcMemcachedProvider'); define ( 'LOGBACKEND' , 'filelog'); // Вначале стоит логировать на уровне debug, когда всё будет работать, поменяйте на LOGLEVEL_INFO define ( 'LOGLEVEL' , LOGLEVEL_DEBUG); define ( 'LOGAUTHFAIL' , true); define ( 'LOGUSERLEVEL' , LOGLEVEL_DEVICEID); $specialLogUsers = array(); define ( 'LOGFILEDIR' , '/var/log/z-push/'); define ( 'LOGFILE' , LOGFILEDIR . 'z-push.log'); define ( 'LOGERRORFILE' , LOGFILEDIR . 'z-push-error.log'); define ( 'LOG_SYSLOG_HOST' , false); define ( 'LOG_SYSLOG_PORT' , 514); define ( 'LOG_SYSLOG_PROGRAM' , 'z-push'); define ( 'LOG_SYSLOG_FACILITY' , LOG_LOCAL0); // Установим по этому адресу файл доверенных корневых центров сертификации от Mozilla define ( 'CAINFO' , '/usr/share/z-push/cacert.pem'); define ( 'PROVISIONING' , true); define ( 'LOOSE_PROVISIONING' , false); define ( 'PROVISIONING_POLICYFILE' , 'policies.ini'); define ( 'SYNC_CONFLICT_DEFAULT' , SYNC_CONFLICT_OVERWRITE_PIM); define ( 'SYNC_FILTERTIME_MAX' , SYNC_FILTERTYPE_ALL); // Интервал проверки почты сервером (и доставки push-уведомлений): define ( 'PING_INTERVAL' , 30); define ( 'FILEAS_ORDER' , SYNC_FILEAS_LASTFIRST); define ( 'SYNC_MAX_ITEMS' , 512); define ( 'UNSET_UNDEFINED_PROPERTIES' , false); define ( 'SYNC_CONTACTS_MAXPICTURESIZE' , 5242880); define ( 'ALLOW_WEBSERVICE_USERS_ACCESS' , false); define ( 'USE_PARTIAL_FOLDERSYNC' , false); define ( 'PING_LOWER_BOUND_LIFETIME' , false); define ( 'PING_HIGHER_BOUND_LIFETIME' , false); define ( 'SYNC_TIMEOUT_MEDIUM_DEVICETYPES' , "SAMSUNGGTI"); define ( 'SYNC_TIMEOUT_LONG_DEVICETYPES' , "iPod, iPad, iPhone, WP, WindowsOutlook"); // Самое важное: тип синхронизации почты define ( 'BACKEND_PROVIDER' , 'BackendIMAP'); // Максимальный размер сообщений (для отправки вложений) define ( 'MAX_EMBEDDED_SIZE' , 31457280); define ( 'SEARCH_PROVIDER' , ''); define ( 'SEARCH_WAIT' , 30); define ( 'SEARCH_MAXRESULTS' , 30); define ( 'KOE_CAPABILITY_GAB' , true); define ( 'KOE_CAPABILITY_RECEIVEFLAGS' , true); define ( 'KOE_CAPABILITY_SENDFLAGS' , true); define ( 'KOE_CAPABILITY_OOF' , true); define ( 'KOE_CAPABILITY_OOFTIMES' , true); define ( 'KOE_CAPABILITY_NOTES' , true); define ( 'KOE_CAPABILITY_SHAREDFOLDER' , true); define ( 'KOE_CAPABILITY_SENDAS' , true); define ( 'KOE_GAB_STORE' , 'SYSTEM'); define ( 'KOE_GAB_FOLDERID' , ''); define ( 'KOE_GAB_NAME' , 'Z-Push-KOE-GAB'); $additionalFolders = array( ); Файл политик, применяемых к мобильным устройствам, – /etc/z-push/policies.ini – можно оставить как есть, отредактировав только параметр maxattsize, чтобы отправлять большие вложения (до 30 Mb): maxattsize = '31457280' Файл /etc/z-push/memcached.conf.php также оставляем как есть, если memcached у вас работает со стандартным портом 11211. Теперь отредактируем настройки IMAP в файле /etc/z-push/imap.conf.php: <?php // IMAP-сервер Яндекса: define ( 'IMAP_SERVER' , 'imap.yandex.ru'); define ( 'IMAP_PORT' , 993); define ( 'IMAP_OPTIONS' , '/ssl/notls/norsh'); define ( 'IMAP_AUTOSEEN_ON_DELETE' , false); define ( 'IMAP_FOLDER_CONFIGURED' , true); define ( 'IMAP_FOLDER_PREFIX' , ''); define ( 'IMAP_FOLDER_PREFIX_IN_INBOX' , false); define ( 'IMAP_FOLDER_INBOX' , 'INBOX'); define ( 'IMAP_FOLDER_SENT' , 'SENT'); define ( 'IMAP_FOLDER_DRAFT' , 'DRAFTS'); define ( 'IMAP_FOLDER_TRASH' , 'TRASH'); define ( 'IMAP_FOLDER_SPAM' , 'SPAM'); define ( 'IMAP_FOLDER_ARCHIVE' , 'ARCHIVE'); define ( 'IMAP_INLINE_FORWARD' , true); define ( 'IMAP_EXCLUDED_FOLDERS' , 'Корзина|Outbox'); // Поле, которое будет подставляться в "От:", см. пояснения ниже: define ( 'IMAP_DEFAULTFROM' , 'domain'); // Настройки на случай, когда в поле "От:" подставляется значение из базы данных MySQL/MariaDB: // define ( 'IMAP_DEFAULTFROM' , 'sql'); define ( 'IMAP_FROM_SQL_DSN' , 'mysql:host=localhost;port=3306;dbname=zpush'); define ( 'IMAP_FROM_SQL_USER' , 'ZPush'); define ( 'IMAP_FROM_SQL_PASSWORD' , 'db_password'); define ( 'IMAP_FROM_SQL_OPTIONS' , serialize(array(PDO::ATTR_PERSISTENT => true))); define ( 'IMAP_FROM_SQL_QUERY' , "select first_name, last_name, mail_address from users where mail_address = '#username'"); define ( 'IMAP_FROM_SQL_FIELDS' , serialize(array( 'first_name' , 'last_name', 'mail_address'))); define ( 'IMAP_FROM_SQL_FROM' , '#first_name #last_name '); define ( 'IMAP_FROM_SQL_FULLNAME' , '#first_name #last_name'); // Сервер LDAP настраивать не будем, оставим, как есть: define ( 'IMAP_FROM_LDAP_SERVER' , 'localhost'); define ( 'IMAP_FROM_LDAP_SERVER_PORT' , '389'); define ( 'IMAP_FROM_LDAP_USER' , 'cn=zpush,ou=servers,dc=zpush,dc=org'); define ( 'IMAP_FROM_LDAP_PASSWORD' , 'password'); define ( 'IMAP_FROM_LDAP_BASE' , 'dc=zpush,dc=org'); define ( 'IMAP_FROM_LDAP_QUERY' , '(mail=#[email protected]#domain)'); define ( 'IMAP_FROM_LDAP_FIELDS' , serialize(array( 'givenname' , 'sn', 'mail'))); define ( 'IMAP_FROM_LDAP_FROM' , '#givenname #sn '); define ( 'IMAP_FROM_LDAP_FULLNAME' , '#givenname #sn'); // Отправлять почту будем через SMTP-сервер Яндекса: define ( 'IMAP_SMTP_METHOD' , 'smtp'); global $imap_smtp_params; $imap_smtp_params = array(); $imap_smtp_params = array( 'host' => 'ssl://smtp.yandex.com', 'port' => '465', 'auth' => true, 'username' => 'imap_username', 'password' => 'imap_password', 'verify_peer' => true, 'verify_peer_name' => true, 'debug' => true); // Закомментированный пример конфигурации, когда используется SMTP-сервер SendGrid: //$imap_smtp_params = array( 'host' => 'ssl://smtp.sendgrid.net', 'port' => '465', 'auth' => true, 'username' => 'apikey', 'password' => 'API-ключ', 'verify_peer' => true, 'verify_peer_name' => true, 'allow_self_signed' => true); define ( 'MAIL_MIMEPART_CRLF' , "\r\n"); define ( 'SYSTEM_MIME_TYPES_MAPPING' , '/etc/mime.types'); define ( 'IMAP_MEETING_USE_CALDAV' , true); Настройка 'IMAP_DEFAULTFROM' определяет, откуда сервер будет брать строку, подставляемую в поле "От:" исходящих сообщений. При нативном развёртывании сервера Exchange эта информация берётся из списка пользователей домена. В Z-Push можно выбирать между строкой, заполняемой пользователем в поле "Домен" настроек EAS на мобильном устройстве, либо из базы данных, либо из LDAP. В примере конфигурации я оставил закомментированным настройку, когда строка "От:" выбирается из базы данных. На мой взгляд, более гибким является вариант, когда пользователь может отредактировать эту строку самостоятельно. Например, если есть несколько ящиков, авторизованных в ПДД Яндекса или учётной записи пользователя (сбор почты с других ящиков), то можно временно поменять адрес отправителя на другой, или написание имени отправителя – с русского на англоязычное. Тем не менее, если здесь не будет указан действительный/авторизованный адрес, SMTP-сервер Яндекса заменит строку просто на адрес e-mail по умолчанию. Например, у меня обычно указано: Gregory A. Pozhvanov <[email protected]>, см. шестой скриншот ниже в секции Д5. Напоследок отредактируем файл службы автоматического определения параметров EAS. Он находится по адресу /etc/z-push/autodiscover.conf.php: <?php // Часовой пояс, не опять, а снова: define ( 'TIMEZONE' , 'Europe/Moscow'); define ( 'BASE_PATH' , dirname($_SERVER['SCRIPT_FILENAME']). '/'); // Адрес сервиса Z-Push: define ( 'SERVERURL' , 'https://mail.yourdomain.com/Microsoft-Server-ActiveSync'); define ( 'USE_FULLEMAIL_FOR_LOGIN' , true); define ( 'LOGBACKEND' , 'filelog'); define ( 'LOGFILEDIR' , '/var/log/z-push/'); define ( 'LOGFILE' , LOGFILEDIR . 'autodiscover.log'); define ( 'LOGERRORFILE' , LOGFILEDIR . 'autodiscover-error.log'); define ( 'LOGLEVEL' , LOGLEVEL_INFO); define ( 'LOGUSERLEVEL' , LOGLEVEL); $specialLogUsers = array(); define ( 'LOG_SYSLOG_HOST' , false); define ( 'LOG_SYSLOG_PORT' , 514); define ( 'LOG_SYSLOG_PROGRAM' , 'z-push-autodiscover'); define ( 'LOG_SYSLOG_FACILITY' , LOG_LOCAL0); define ( 'BACKEND_PROVIDER' , 'BackendIMAP'); О том, зачем нужен Autodiscover и как это работает, читайте в документации Z-Push. По неведомой мне причине отправка писем „из коробки“ не работала. Вообще. В результате долгого поиска я осознал, что мой сервер на DigitalOcean пытается связаться с SMTP-сервером Яндекса по протоколу IPv6, и это у него почему-то не получается. Добавление строки в /etc/hosts решило эту проблему: 87.250.250.38 smtp.yandex.com

3. Настройка NGINX

В конфигурационный файл NGINX или (лучше) в файл /etc/nginx/sites-enabled/zpush добавляем секцию для нового сервера: # Z-Push configuration # # server # Z-Push END OF CONFIGURATION #

4. Тестирование конфигурации Z-Push

Когда всё настроено, проверьте конфигурацию NGINX: sudo nginx -t Если получено OK, перезапустите NGINX: sudo systemctl reload nginx и откройте страницу почтового интерфейса: https://mail.yourdomain.com. Если всё в порядке, то браузер выдаст диалоговое окно аутентификации. Введите имя пользователя и пароль учётной записи в ПДД Яндекса. Если данные введены правильно, то система авторизует пользователя на Яндексе и выдаст страницу, в которой написано, что Exchange Active Sync работает только с использованием метода POST:

Проверка работы Z-Push через браузер Теперь проверьте, насколько правильно настроена автонастройка EAS, используя онлайн-инструмент Microsoft: testconnectivity.microsoft.com. В конце теста вы должны получить сообщение о том, что все или почти все тесты прошли успешно. Поскольку автонастройка может отзываться как по адресу основного домена (https://yourdomain.com/Autodiscover/Autodiscover.xml), так и с субдомена (https://autodiscover.yourdomain.com/Autodiscover/Autodiscover.xml), и достаточно хотя бы одного адреса, у меня тест выдаёт предупреждение, которое смело можно проигнорировать:

Тест настройки Autodiscover

5. Настройка почты EAS в iOS

Когда конфигурация сервера завершена, самое время подключить почту с поддержкой Push-уведомлений в „штатном“ приложении iOS – Почта (Mail). Push-уведомления не только оперативно сообщают о приходе новой почты, но и позволяют экономить заряд батареи, т.к. проверкой почты занимается сервер, и направляет обновление на телефон или планшет только тогда, когда это необходимо. Открываем приложение Настройки, далее Почта > Учетные записи > Добавить, и выбираем тип учётной записи – Exchange. Далее вводим адрес e-mail, зарегистрированный в ПДД Яндекса, пароль и условное название учётной записи, удобное вам. Далее с помощью сервиса Autodiscover происходит автоматическая настройка учётной записи. Опять же, если всё настроено правильно, каждая строка будет отмечена галочкой, и телефон/планшет попросит отметить те службы, которые вы хотите синхронизировать. Оставляем выбранной только почту, и переходим к следующему экрану.

Добавление и настройка синхронизации учётной записи Exchange Теперь в настройках учётной записи коснитесь секции настройки, и введите имя домена, как обсуждалось выше – эта строка будет подставляться в поле "От:" исходящих сообщений. Здесь же в дополнительных настройках можно сразу указать параметры электронной подписи и шифрования сообщений по протоколу S/MIME. Наконец, удобство учётной записи EAS в том, что Push-уведомления можно настраивать не только для папки „Входящие“, но и для любой другой папки в аккаунте.

Дополнительные настройки учётной записи Exchange Осталось только активировать системные уведомления для новой учётной записи, и готово! Открывайте приложение Почта и смотрите, как загружается почта 🙂 Если не увлекаться глубиной синхронизации и оставить её на уровне последних двух недель или месяца, то мощности самого доступного виртуального сервера за $5 в месяц вполне достаточно и для работы сайта, и для работы с почтой нескольких пользователей. Удачной настройки почты!

📎📎📎📎📎📎📎📎📎📎