Вяжем exim c SES/Mailgun при куче доменов

Документация связанная с установкой, настройкой и работой пользовательского ПО
Ответить
Аватара пользователя
Raven
Бородатый сис
Бородатый сис
Сообщения: 2788
Зарегистрирован: 03 мар 2010, 15:12
ОС: RHEL 7
Откуда: Из серверной

Вяжем exim c SES/Mailgun при куче доменов

Сообщение Raven » 25 янв 2018, 12:57

Иногда бывает - шкварится IP на сервере из-за какого-нибудь ушлепка или Joomla 1.5 с кучей плагинов тех же лет. Если из большинства DNSBL-сервисов IP еще можно заделистить, то с gmail, yahoo и аутглюком дела обстоят куда хуже. А почту слать надо, ибо клиентам не обьяснишь. Можно попробовать сменить IP, но это актуально только для сервера с 1-2 сайтами. На сервере с десятком-другим сайтов (преимущественно чужих) просто так уже не сменишь.
Если ваш провайдер предоставляет релей - можно им воспользоваться. Хотя процент отлупов на релеях обычно достаточно велик, часть писем все же будет доставлена)))
Если релея нет, можно прибегнуть к помощи сторонних ESP, таких как Amazon SES, Mailgun, SendGrid, Mandrill, MailJet и т.д.
Рассмотрим первых двух.

Amazon SES.
SES позволяет использовать глобальный логин/пароль для отправки почты с любого верифицированного домена. Поэтому сильно можно не заморачиваться.

В конфиг exim добавляем следующие секции (каждый располагаем в начале своих секций):

Авторизашка:

Код: Выделить всё

ses_login:
  driver = plaintext
  public_name = LOGIN
  client_send = ": ACCESS_KEY_ID : ACCESS_KEY_SECRET"
  server_set_id = $auth1
Роутер:

Код: Выделить всё

ses_route:
  driver = manualroute
  domains = ! +local_domains
  transport = ses_transport
  route_list = * email-smtp.<region>.amazonaws.com
  ignore_target_hosts = 127.0.0.0/8
  no_more
  no_verify
Транспорт:

Код: Выделить всё

ses_transport:
  driver = smtp
  port = 2587
  hosts = email-smtp.<регион>amazonaws.com
  hosts_require_auth = $host_address
  hosts_require_tls = $host_address
У меня завелось без особого бубна, но есть пара нюансов.
1) Отныне каждый почтовый домен нужно будет верифицировать в SES
2) Редиректы не будут работать.

Доки

Mailgun
С Mailgun все немножко сложнее, нежели с SES, поскольку в отличии от последнего mg выделяет уникальные логин/пароль на каждый зареганный домен.
Создадим файлики /etc/exim/smartdomains и /etc/exim/smartdomains_exclude
В первом описываем домены и их данные из mailgun:

Код: Выделить всё

mydomain.com:    smtp_host=smtp.mailgun.org    smtp_user=postmaster@mg.mydomain.com    smtp_pass=пароль
Во второй файлик добавляем те домены, которые нужно исключить из отправки через mailgun, например домены из соседней виртуалки.

Код: Выделить всё

local.domain:local.domain
В шапке конфига, сразу после определения local_domains добавляем новую переменную:

Код: Выделить всё

domainlist non_smarthost = lsearch;/etc/exim/smartdomains_exclude
В начало секции роутеров добавляем

Код: Выделить всё

mailgun_route:
    driver = manualroute
    domains = ! +local_domains : ! +non_smarthost
    condition = ${extract{smtp_host}{${lookup{$sender_address_domain}lsearch{/etc/exim/smartdomains}{$value}fail}}}
    route_list = "* ${extract{smtp_host}{${lookup{$sender_address_domain}lsearch{/etc/exim/smartdomains}{$value}fail}}} bydns"
    transport = mailgun_transport
В транспортах создаем новый:

Код: Выделить всё

mailgun_transport:
    driver = smtp
    port = 587
    hosts_try_auth = $host_address
    hosts_require_tls = $host_address
и добавляем авторизашку:

Код: Выделить всё

mailgun_auth:
    driver = plaintext
    public_name = LOGIN
    hide client_send = ": ${extract{smtp_user}{${lookup{$sender_address_domain}lsearch{/etc/exim/smartdomains}{$value}fail}}} : ${extract{smtp_pass}{${lookup{$sender_address_domain}lsearch{/etc/exim/smartdomains}{$value}fail}}}"
Настраиваем домены и радуемся. Нюансы те же, что и выше)
Доки
Я не злопамятный, я просто часто ковыряю логи
Изображение
Ответить

Вернуться в «Документация *nix»