INTEGRITY Документация

SMTP

Cloudflare Email Service предоставляет аутентифицированную конечную точку отправки по SMTP, поэтому вы можете отправлять письма из любого приложения, фреймворка или готового почтового клиента, поддерживающего SMTP. Используйте SMTP, если REST API и привязка Workers не подходят: например, при интеграции существующего приложения, которое уже использует SMTP, или языковой SMTP-библиотеки (Nodemailer, smtplib, PHPMailer, JavaMail).

Письма, отправленные по SMTP, попадают в тот же конвейер доставки, что и письма через REST API и привязку Workers: на них распространяются те же ограничения, получают одинаковую подпись DKIM и ARC и создают одинаковые журналы доставки.

Конечная точка

smtp.mx.cloudflare.net:465
Параметр Значение
Host smtp.mx.cloudflare.net
Порт 465
Безопасность Неявный TLS (также называемый SMTPS)
SMTP AUTH PLAIN или LOGIN
Имя пользователя Буквальная строка api_token
Пароль Токен API Cloudflare (см. ниже)

Cloudflare поддерживает отправку по SMTP только на порту 465 с неявным TLS. Обычный SMTP, оппортунистический STARTTLS на порту 587, а также ретрансляцию без аутентификации на порту 25 не поддерживаются для исходящей отправки. Порт 25 зарезервирован для входящей почты на Email Routing.

Предварительные требования

Чтобы отправлять письма по SMTP, вам потребуется:

  1. Учетная запись с Email Sending включено.
  2. Как минимум один домен подключен в разделе Email Service > Email Sending в Cloudflare dashboard.
  3. A API-токен Cloudflare на Email Sending: Edit разрешение. Принимаются как токены, принадлежащие аккаунту (рекомендуется), так и токены, принадлежащие пользователю; токен используется как пароль SMTP.

Относитесь к этому токену как к учётным данным. Любой, у кого он окажется, сможет отправлять письма от имени любого подключённого домена на соответствующем аккаунте.

Быстрый старт

Отправьте письмо с одним curl команду. Замените <API_TOKEN> с API-токен Cloudflare у которого есть Email Sending: Edit разрешение, и замените --mail-from и --mail-rcpt адреса на собственные.

cat > mail.txt <<EOF
From: [email protected]
To: [email protected]
Subject: Welcome to our service!

Thanks for signing up.
EOF

curl --ssl-reqd \
  --url "smtps://smtp.mx.cloudflare.net:465" \
  --user "api_token:<API_TOKEN>" \
  --mail-from "[email protected]" \
  --mail-rcpt "[email protected]" \
  --upload-file mail.txt

Домен отправителя ([email protected]) должен быть подключён для Email Sending в аккаунте, которому принадлежит API-токен.

Аутентификация

SMTP-эндпоинт Cloudflare поддерживает два механизма SASL, оба определены в RFC 4954 ↗:

В обоих случаях именем пользователя является буквальная строка api_token а паролем служит ваш API-токен Cloudflare.

Создайте AUTH PLAIN полезная нагрузка

AUTH PLAIN отправляет \0api_token\0<API_TOKEN> в кодировке base64:

printf '\0api_token\0%s' "<API_TOKEN>" | base64

Необработанная SMTP-стенограмма

В следующей записи сеанса показана полная аутентифицированная отправка с использованием openssl s_client. Строки, начинающиеся с > отправляются клиентом.

$ openssl s_client -quiet -connect smtp.mx.cloudflare.net:465 -crlf
220 mx.cloudflare.net Cloudflare Email ESMTP Service ready
> EHLO client.example.com
250-mx.cloudflare.net greets client.example.com
250-AUTH PLAIN LOGIN
250-SIZE 5242880
250-8BITMIME
250 ENHANCEDSTATUSCODES
> AUTH PLAIN AGFwaV90b2tlbgBpd0RQLi5oZWw=
235 2.7.0 Authentication successful
> MAIL FROM:<[email protected]>
250 2.1.0 Ok
> RCPT TO:<[email protected]>
250 2.1.5 Ok
> DATA
354 Start mail input; end with <CR><LF>.<CR><LF>
From: [email protected]
To: [email protected]
Subject: Welcome

Thanks for signing up.
.
250 2.0.0 Ok <[email protected]>
> QUIT
221 mx.cloudflare.net Cloudflare Email ESMTP Service closing transmission channel

250 2.0.0 Ok ответ после тела письма включает присвоенный Message-ID. Используйте его, чтобы сопоставить отправку с журналами доставки в панели управления.

Примеры

Примеры для конкретных языков и инструментов: curl, Nodemailer, Python smtplib, а также PHPMailer, см. Отправка писем через SMTP.

Лимиты

Для отправки по SMTP действуют следующие ограничения на сеанс:

Лимит Значение
RCPT TO получателей 50 за сессию
SIZE указанный в EHLO 5 MiB
AUTH тайм-аут команды 30 секунд
DATA тайм-аут команды 300 секунд

Общеаккаунтные квоты (дневные лимиты отправки, лимиты содержимого, лимиты заголовков) являются общими для REST API и привязки Workers. См. Лимиты с полным списком.

Коды ответа

SMTP-сервер Cloudflare возвращает стандартные RFC 5321 ↗ коды ответа вместе с RFC 3463 ↗ расширенные коды состояния.

Код Значение
220 Служба готова (приветствие после установления TLS-соединения).
235 2.7.0 Аутентификация выполнена успешно.
250 EHLO, MAIL FROM, RCPT TO, или DATA успешно завершено.
354 Готово принять тело письма, завершите с помощью <CR><LF>.<CR><LF>.
421 Служба временно недоступна. Повторите попытку позже.
451 4.3.0 Локальная ошибка: сообщение принято, но отложено. Повторите попытку позже.
452 4.5.3 Слишком много получателей в этой сессии. Откройте новую сессию для остальных.
500 / 501 Синтаксическая ошибка в команде или аргументах.
503 Неверная последовательность команд (например, MAIL FROM перед AUTH).
530 5.7.0 Требуется аутентификация.
535 5.7.8 Сбой аутентификации. См. Устранение неполадок.
550 5.7.1 Отправитель или ретранслятор отклонён: обычно MAIL FROM домен не подключён.
552 5.3.4 Сообщение превышает 5 MiB SIZE лимит.
554 Транзакция не выполнена: содержимое отклонено политикой.

Устранение неполадок

535 5.7.8 Authentication failed

Возможные причины:

550 5.7.1 Sender denied

Адрес в MAIL FROM находится в домене, который не подключён для Email Sending в аккаунте, которому принадлежит API-токен. Подключите домен в разделе Email Service > Email Sending в панели управления или измените адрес отправителя.

552 5.3.4 Message too big

Размер тела письма (включая вложения после MIME-кодирования) превышает 5 МиБ. Уменьшите размер вложений или разделите сообщение.

Ошибки установления TLS-соединения

SMTP-эндпоинт Cloudflare требует TLS с момента подключения (implicit TLS). Убедитесь, что ваш клиент настроен на SSL/TLS на порту 465, а не STARTTLS на порту 587 (что не поддерживается).

О проблемах аутентификации, связанных с SPF, DKIM или DMARC на стороне получателя, см. Устранение неполадок SPF, DKIM и DMARC.