Что должно быть известно до настройки SMTP
Нужны host, port, TLS-режим, login, password/app password, допустимый From и ограничения провайдера. Не храните пароль SMTP в JavaScript или публичном репозитории.
Базовая конфигурация
| Параметр | Пример |
|---|---|
| Host | smtp.example.com |
| Port | 587 |
| Encryption | STARTTLS |
| Username | no-reply@example.com |
| From | адрес вашего домена |
| Reply-To | email пользователя формы |
| Timeout | ограниченный, например 10–20 сек |
| Queue/retry | при временной ошибке |
Проверить TLS-соединение с SMTP
openssl s_client -starttls smtp -connect smtp.example.com:587 -servername smtp.example.com
# Завершить сессию:
QUITНе подставляйте email посетителя в From
Если форма отправляется «от имени» произвольного Gmail/Yandex адреса, это конфликтует с почтовой аутентификацией. Используйте From своего домена, а адрес клиента помещайте в Reply-To.
Что логировать
Сохраняйте время, получателя, message-id, SMTP host, код ответа и краткую ошибку. Пароль и полный auth exchange в production-log не нужны.
Если письмо не пришло
| Слой | Проверка |
|---|---|
| Форма | запрос успешно дошёл до backend? |
| Приложение | вызов SMTP был выполнен? |
| SMTP | какой код вернул сервер? |
| DNS | SPF/DKIM/DMARC настроены? |
| Получатель | spam/reject/quarantine? |
| Репутация | PTR, домен, IP, история отправителя |
Очередь лучше синхронной отправки
Если письмо критично для формы, сохраните заявку до SMTP. При временном timeout ставьте уведомление в очередь и повторяйте позже, вместо того чтобы держать пользователя на странице 30 секунд.