Что такое SMTP-гейт
SMTP-гейт – это способ передачи нам заданий на отправку писем через SMTP-протокол. Разница между API и SMTP в использовании протокола передачи данных: SMTP или HTTP протокол. По SMTP-протоколу для отправки на сервер используется последовательность команд.
enKod поддерживает:
- отправку писем протоколами: SMTP, TLS 1.2+ (порт 587) и SSL (порт 465).
- отправку HTML-писем с вложениями (до 25 МБ)
- шифрование соединения SSL/TLS
- ведение журналов аудита операций: отправка, ошибки
Авторизация и отправка сообщения
enKod аутентификация осуществляется с помощью SMTP-ключей. Получите от вашего персонального менеджера SMTP-ключ для использования SMTP-гейта.
Подключение к SMTP-серверу осуществляется по адресу: smtpgateway.enkod.io:587
Используйте следующую последовательность команд:
STARTTLS- после ввода этой команды все дальнейшее общение между клиентом и сервером проходит по зашифрованному TLS протоколу.EHLO- приветственное сообщение, в ответ получаем список настроек сервераAUTH PLAIN- закодированный в base64 логин и пароль (для аутентификации требуется ввести только SMTP API-ключ в качестве пароля, логин оставить пустым)MAIL FROM- емейл, с которого будет отправлено сообщениеREPLY-TO- емейл, на который будет отправлен ответ. Если заголовок не заполнен, то по умолчанию подставляется емейл отправителяRCPT TO- емейл, на который отправляется сообщениеDATA- после ввода этой команды можно вводить само тело сообщение с заголовками.
Пример запроса на отправку через openssl
s_client -starttls smtp -connect smtpgateway.enkod.io:587
ehlo testmail.ru
auth plain AABfN3lhTUZtcm5hZ251VFRXR1lueVNiQWNLX2R4VTh4WWVYdzV2UzBYXVpMQ==
mail from:test@testmail.ru
rcpt to:test2@testmail.ru
data
Date: Thu, 29 Sep 2022 15:42:13 GMT
From: test@testmail.ru
To: test2@testmail.ru
Subject: subject
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xmlns:o="urn:schemas-microsoft-com:office:office" style="font-family:'open sans', 'helvetica neue', helvetica, arial, sans-serif">
<head>
<meta charset="UTF-8"/>
<meta content="width=device-width, initial-scale=1" name="viewport"/>
<meta name="x-apple-disable-message-reformatting"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta content="telephone=no" name="format-detection"/>
<title>title</title><!--[if (mso 16)]>
<style type="text/css">
a {text-decoration: none;}
</head>
<html>
<body>
message body
</body>
</html>
Особенности отображения тем и отправителя сообщений
Яндекс обновил правила по обработке тем писем:
- использовать кодировки UTF-8 нельзя
- рекомендуется формировать заголовки и тело писем согласно RFC-стандартам с экранированием непечатных символов. Т.е. обязательно использовать на теме сообщения и отправителе кодировку base64, если они написаны на кириллице.
Можно использовать в них такую структуру:
=?charset?encoding?encoded-text?=
Например отправлять тему в виде:
Subject: =?utf-8?B?0KLQtdGB0YIgU01UUCDlhbzQvNC+0LQ=?=
- =? — начало кодированного слова
- charset — utf-8 (кодировка символов)
- encoding — B (метод кодирования)
- encoded-text — 0KLQtdGB0YIgU01UUCDlhbzQvNC+0LQ (закодированный текст в base64)
- ?= — конец кодированного слова
Если адрес в поле От кого сформирован не с использованием стандарта RFC, в нём будет проставляться EMPTY-FROM. В свойствах письма тоже будет From: EMPTY-FROM.
Возможные ошибки
invalid from email- отправляющий емейл не соответствует структуре name@domain.comno username or password- не используется аутентификация AUTH PLAINapi key doesn't have accesses- для API-ключа нет доступа к SMTPclient is deleted- аккаунт неактивен или удаленinternal service error- внутренняя ошибка сервисаwrong api key- API-ключ недействителен
Процесс отправки сообщения
Запрос → enKod → Принимающий почтовый сервер
Шаг 1. enKod проверяет полученный запрос (действителен ли API-ключ, валиден ли указанный email и др.)
- если проверка не пройдена - возвращаем ошибку из перечня выше
- если проверка пройдена - запрос отрабатывает успешно, сообщение попадает в очередь enKod
Шаг 2. enKod пытается связаться с почтовым сервером.
Финальный статус доставки зависит от множества факторов (репутация домена отправителя, существование почтового ящика получателя и т.д.). Дополнительно принимающий почтовый сервер может попросить отправить письмо позже - для этого мы используем собственный механизм переотправок. Этот процесс может затянуться, поэтому чтобы не задерживаться с ответом - enKod проводит первоначальные проверки на шаге 1 и отвечает, что все отработало корректно.
После того как письмо было отправлено, мы не возвращаем сразу ошибку, которая произошла на стороне принимающего почтового сервера. Из-за этого запрос может отработать успешно, но в статистике будет отражаться ошибка.
Для получения информации о финальном статусе доставки сообщения вы можете настроить Webhooks.