Столкнулся с 2 проблемами при использовании сервиса PDD от Яндекса с VestaCP.
Проблема #1. Использование секретного DKIM ключа от Яндекса.
Описание проблемы: Требуется корректная DKIM подпись для отправки как из почтового интерфейса Яндекса, так и для отправки с нашего сервера.
Решение:
- Получение секретного ключа DKIM
Получаем токен для управления доменом через
API: https://pddimp.yandex.ru/api2/admin/get_token
Далее с помощью токена можно получить секретный ключ DKIM. Подробности тут: https://tech.yandex.ru/pdd/doc/reference/dkim-status-docpage/
Теперь этот ключ надо подменить в нашей конфигурации Exim для домена. - Установка нового ключа DKIM взамен сгенерированного самой панелью Vesta
Мы предполагаем, что домен уже добавлен в панели управления (вкладка MAIL) с включенным DKIM.
Нужно положить(заменить) полученный у Яндекса секретный ключ в файл /etc/exim4/domains/{ВАШ_ДОМЕН}/dkim.pem - Проверяем правильность установки ключа. Для проверки я обычно отправляю письмо на ящик на Яндексе и проверяю наличие флажка
Проблема #2. После создания mail домена у VestaCP все письма, отправленные на ящики вида user@domain падают в локальную почту.
Но так как мы используем PDD от яндекса, нам в большинстве случаев это не требуется, так как интерфейс яндекса в большинстве случаев удобнее и привычнее RoundCube (да и защита от спама посерьезнее).
В нашем случае ящики user@domain создаются для менеджеров, которые с Яндексом хорошо знакомы, поэтому он более предпочтителен.
Решение.
Для решения проблемы потребуется чуть-чуть изменить конфиги Exim. Ранее я использовал не очень красивое решение, но потом нашел решение получше.
В обоих случаях мы будем изменять файл конфига Exim, который располагается по пути /etc/exim4/exim4.conf.template
Решение #1. «В лоб».
Находим в указанном выше файле блок ROUTERS CONFIGURATION и чуть ниже строчки:
dnslookup: driver = dnslookup domains = !+local_domains transport = remote_smtp no_more
Правило в строке domains = !+local_domains пропускает все существующие в VestaCP домены (mail домены). Мы можем закомментировать эту строчку для быстрого решения. ВНИМАНИЕ: данное «решение» можно применять ТОЛЬКО в том случае, если вы не собираетесь использовать внутреннюю локальную почту!
Решение #2.
Находим в указанном выше файле блок ROUTERS CONFIGURATION и перед правилом dnslookup добавляем еще одно:
dnslookup2: driver = dnslookup transport = remote_smtp condition = ${if exists{/etc/exim4/domains/$domain/remote_always}{true}{false}} no_more
Теперь мы можем «управлять» поведением. Если требуется, чтобы почта на user@domain «уходила» с сервера на удаленный сервер (в данном случае в яндекс), то надо всего лишь создать пустой файл remote_always в папке /etc/exim4/domains/{ВАШ_ДОМЕН}/
Не забудьте перезагрузить Exim (service exim4 restart).
В логах можно увидеть следующее (письмо отправляется на 3 ящика)
2016-03-29 15:56:52 1aktCW-0003J6-E8 <= no-reply@{DOMAIN} U=user P=local S=1018 id=9334fe7094b267139e89cb4005007491@{DOMAIN} 2016-03-29 15:56:53 1aktCW-0003J6-E8 => user_user@yandex.ru R=dnslookup T=remote_smtp H=mx.yandex.ru [213.180.204.89] X=TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256 C="250 2.0.0 Ok: queued on mxfront9j.mail.yandex.net as 1459256213-e8YZDBmRmN-ur1KgWJk" 2016-03-29 15:56:54 1aktCW-0003J6-E8 => manager@{DOMAIN} R=dnslookup2 T=remote_smtp H=mx.yandex.net [93.158.134.89] X=TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256 C="250 2.0.0 Ok: queued on mxfront5m.mail.yandex.net as 1459256214-sJw1dJeXUh-urn0ojhT" 2016-03-29 15:56:54 1aktCW-0003J6-E8 -> tatiana@{DOMAIN} R=dnslookup2 T=remote_smtp H=mx.yandex.net [93.158.134.89] X=TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256 C="250 2.0.0 Ok: queued on mxfront5m.mail.yandex.net as 1459256214-sJw1dJeXUh-urn0ojhT" 2016-03-29 15:56:54 1aktCW-0003J6-E8 Completed
Для ящиков user@domain сработает правило dnslookup2, для остальных dnslookup
Добрый день, спасибо за статью застрял на этом моменте.
Далее с помощью токена можно получить секретный ключ DKIM. Подробности тут: https://tech.yandex.ru/pdd/doc/reference/dkim-status-docpage/
как все-таки получить ключ, не совсем понимаю как делать запрос. Подскажите.
Для выполнения запроса нужен REST клиент. Я пользуюсь встроенным в IDE. Вам могу предложить на выбор 2 варианта.
1. Использовать CURL на сервере, если есть. Строка запроса есть в документации под «примером запроса».
2. REST клиент — расширение для хрома https://chrome.google.com/webstore/detail/dhc-rest-client/aejoelaoggembcahagimdiliamlcdmfm?hl=ru или любое другое по запросу REST.
Для получения ключа нужно вбить правильно параметры. Установил расширение сейчас, по пунктам:
а) HTTP поменять на HTTPS
б) url — pddimp.yandex.ru/api2/admin/dkim/status?domain=domain.com&secretkey=yes
Меняем домен на ваш
в) чуть ниже слева под Headers нажимаем плюсик, появится 2 инпута, слева PddToken, справа ваш токен
г) отправить запрос (Send)
Спасибо огромнейшее, все получилось.
Успехов Вам.
Спасибо за статью!!!
Решение №2 помогло!
а как закомментировать??
#
Добрый день.
Подскажите пожалуйста.
1. Я хочу использовать движок Opencart и выставить настройки не отправки через функцию PHP, а отправку через mail самого сервера. Просто коряво там работает отправка писем, а точнее один модуль не хочет слать через настройки самого OpenCart письма.
На одном сервер я вышел из положения настроив MSMTP (SSMTP) на Яндекс почту. И в принципе работает, но получается все домены шлют с одного и того же адреса письма в таком случае (и казалось бы в MSMTP / SSMTP есть настройка, которая должна это предотвращать или типо того, но там чет не пашет).
В общем все это время меня не покидает мысль настроить по нормально сервер VestaCP, чтобы и Cron и письма из самой системы и с сайтов можно было бы настроить на работу с Яндекс почтой.
2. Сейчас поднял новый сервер с VestaCP, но exim параметр при установке выбрал «NO». В системе все равно он присутствует.
Вопрос.
Данная инструкция подойдет для моей задачи? Просто в голове никак не могу картинку правильную сложить … какая должна быть правильная схема в моем случае, если поднимать почтовый сервер мне по факту не нужно локально, я использую только Яндекс почту? Т. е. мне нужно как-то скармливать exim логин, пароль от яндекса в зависимости от разных доменов и отправлять почту через яндекс почту.
P. S. извините за длинный текст 🙂
Чисто теоретически.
Допустим в SPF я добавлю свой сервак вместе с яндексовскими.
DKIM приватный ключ получу и подсуну своему хостингу.
Но вот у меня с PTR загвоздка. Я не смогу своему серваку зарегистрировать PTR запись у провайдера. Тут как бы проблема не с технической стороны.
Как мне быть в моем случае? Можно как-то exim настроить или остается только MSMTP / SSMTP?
Спасибо. Все работает :)))