Отправка почты с серверов где заблокирован 25-ый порт (Google cloud platform)

HELP-ME-24.COM (Freelance Team), Черноусов Антон

На одном из проектов мне потребовалось отправлять оповещения о падении сервиса на электронную почту и я сильно удивился когда узнал, что все взаимодействие по протоколу smtp в "Google cloud platform" заблокировано.

Google cloud заблокирован SMTP-порт

На серверах Google Cloud Platform заблокирован исходящий 25-ый порт, что делает невозможным отправку оповещений штатными средствами системы. Официальная документация сообщает, что порт разблокировать нельзя и рекомендует использовать сторонние сервисы, что мы сейчас и рассмотрим.

Google предложил на выбор три сервиса (на самом деле мы можем и сами поднять систему с подобным функционалом, но незачем завязывать клиента на себя):

  • Sendgrid
  • Mailgun
  • Mailjet

Из представленных сервисов меня устроил только https://www.mailjet.com, так как у этого сервиса заявлена доп. программа для пользователей использующих Google cloud platform и по этой реферальной программе бесплатный тариф позволяет отправлять 800 писем в день, что для системы оповещения вполне достаточно.

Дополнительные лимиты отправки почты MailJet для Google Cloud

Так же, что немаловажно мы можем настроить postfix для использования MailJet в качестве почтового relay-сервера с авторизацией и это позволит нам прозрачно использовать штатный Linux-функционал консольной отправки почты без заморочек с API-функционалом.

Отправка почты осуществляется штатными средствами и вам потребуется перенастроить Postfix на использование внешнего relay-сервера. Похожий функционал мы уже рассматривали в статье "Отправка почты стандартными средствами PHP c использованием стороннего почтового сервера".

Прежде всего вам потребуется установить необходимые пакеты (блок пакетов почтового сервера и авторизации).

# apt-get install postfix libsasl2-modules

В процессе установки будет запущен мастер настройки и вы можете выбрать режим настройки "Local only":

Настройка Postfix при помощи мастера настройки

Дальнейшие опции можно оставить используемыми по умолчанию и по завершении работы мастера настройки мы должны внести правки в конфигурационные файлы.

В конфигурационный файл main.cf добавляем (или изменяем существующий) параметр:

relayhost = in.mailjet.com:2525

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

Активируем TLS режим и указываем файл с учетными данными для авторизации на relay-сервере:

smtp_tls_security_level = encrypt
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous

Создаем файл содержащий учетные денные для авторизации на relay-сервере /etc/postfix/sasl_passwd. Файл содержит записи вида:

in.mailjet.com:2525 API_KEY:API_SECRET

В отличие от рассмотренных ранее методов, в этом используется API-ключ получить который можно перейдя по ссылке https://app.mailjet.com/account/api_keys или используя навигацию по сайту перейти в раздел Mailjet -> Account -> Api Keys.

Созданный файл авторизации необходимо преобразовать в hash-формат командой:

# postmap /etc/postfix/sasl_passwd

Перезапускаем postfix при помощи команды:

# /etc/init.d/postfix restart

И проводим отправку тестового письма:

echo "TEST" | mail -s "Сбой на MarketMon" -aFrom:Monitor\<chernousov@help-me-24.com\> \
chernousov@help-me-24.com

Сообщение будет отправлено через relay-хост и в лог-файле /var/log/mail.log появится соответствующая запись.

to=<chernousov@help-me-24.com.com>, relay=smtp-ovhfr9.mailjet.com[37.59.74.234]:2525, delay=2,
delays=0.01/0.03/1.7/0.25, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 9B6102E400CE)
Aug 14 03:41:59 marketplacemonitor postfix/qmgr[26187]: CDAE2CB4: removed

Теперь почтовые сообщения из Google Cloud Platform будут доставляться получателям.

Обратите внимание! Сообщения должны отправляться от имени пользователя который привязан к учетной записи. За отправку почты от имени определенного пользователя отвечает параметр -aFrom:

В противном случае вы получите "письмо счастья".

Пользователь не в списке рассылки

We have received an email from a new sender address using your account :

Detected on: 2017-08-14 14:41:59
From: root@marketplacemonitor.c.bespoke-apps-151005.internal

Emails sent from this sender will not be sent until you validate this address in your account. Messages will remain in our processing queue for a few days and will be sent as soon as the sender becomes valid.

Оставьте комментарий

Вы должны быть вошедший в чтобы отправить комментарий