Вяжем exim c SES/Mailgun при куче доменов
Добавлено: 25 янв 2018, 12:57
				
				Если ваш провайдер предоставляет релей - можно им воспользоваться. Хотя процент отлупов на релеях обычно достаточно велик, часть писем все же будет доставлена)))
Если релея нет, можно прибегнуть к помощи сторонних 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=пароль
Код: Выделить всё
local.domain:local.domainКод: Выделить всё
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}}}"
Доки