Yuva Email Worker для Cloudflare
Письма в поддержку через Cloudflare.Не нужно запускать почтовый сервер.
Cloudflare® Email Routing принимает почту ваших адресов поддержки, а Yuva Email Worker с открытым кодом передаёт каждое сообщение в Yuva с подписью. Оно попадает в общий ящик как диалог, на который отвечает ваша команда.
Что это
Email Routing на входе
Cloudflare Email Routing становится MX вашего домена и принимает почту. Yuva не слушает SMTP, поэтому не нужно ставить и обновлять почтовый сервер.
Небольшой Worker с открытым кодом
Yuva Email Worker читает исходное сообщение и конверт, подписывает запрос и отправляет его в Yuva. Разбор, объединение в цепочки и решения о спаме остаются на сервере.
Настоящие диалоги
Письмо на адрес поддержки открывает или продолжает диалог во входящих, а команда отвечает из той же панели, что и на чат и сообщения из приложения.
Как сообщение доходит от клиента до вашей команды
- 1Клиент пишет на один из ваших адресов поддержки, например support@example.com.
- 2Cloudflare Email Routing принимает сообщение и передаёт его Yuva Email Worker.
- 3Worker подписывает исходное сообщение, оба адреса конверта и метку времени с помощью HMAC-SHA256 общим с Yuva секретом и отправляет их на /ingress/email вашего сервера Yuva.
- 4Прежде чем прочитать сообщение, Yuva проверяет подпись и то, что метка времени в пределах 5 минут. Запрос с неверной подписью отклоняется.
- 5Yuva находит почтовый канал по адресу получателя и по In-Reply-To и References добавляет сообщение в диалог, к которому оно относится. Всё остальное начинает новый диалог. Ответ снова открывает диалог.
- 6Ваша команда отвечает в панели. Ответ отправляется через собственную SMTP-учётную запись почтового канала, например Amazon SES, Postmark или ваш релей, с того же адреса и в той же цепочке. Ответы не проходят через Worker.
Отказы доходят до отправителя
Когда Yuva окончательно отклоняет сообщение, например из-за неизвестного адреса, заблокированного отправителя или слишком большого размера, Worker отклоняет его, а отправитель получает постоянную ошибку SMTP с причиной от Yuva.
Если Yuva недоступна
Если Yuva отвечает ошибкой сервера, не отвечает в течение 20 секунд или недоступна, Worker может переслать сообщение на выбранный вами адрес, если задан FALLBACK_FORWARD. Этот адрес должен быть проверенным получателем в Email Routing. Тогда сообщение придёт как обычное пересланное и не появится в Yuva. Без FALLBACK_FORWARD доставка завершится ошибкой, а отправляющий сервер может повторить попытку позже.
Настройте за несколько шагов
Вам нужны сервер Yuva и аккаунт Cloudflare, который управляет доменом.
- 1
В Yuva откройте Настройки → ваш ящик → Каналы → Почта и добавьте адрес поддержки. Задайте на сервере секрет и перезапустите его:
YUVA_INGRESS_SECRET=<openssl rand -hex 32> YUVA_INGRESS_AUTHSERV_ID=mx.cloudflare.net
- 2
Разверните Worker в своём аккаунте Cloudflare с тем же секретом:
cd edge bun install bunx wrangler login bunx wrangler secret put INGRESS_SECRET bunx wrangler deploy --var YUVA_URL:https://support.example.com
- 3
В панели Cloudflare откройте свой домен → Email → Email Routing и включите его. Cloudflare добавит свои записи MX и SPF.
- 4
В Routing rules направьте каждый адрес поддержки на Worker yuva-edge. Для универсального канала направьте на него универсальное правило.
- 5
Отправьте тестовое сообщение и увидите, как диалог появится в панели.
- 6
По желанию: сохраняйте почту во время сбоя, добавив резервный адрес в команду развёртывания:
bunx wrangler deploy --var YUVA_URL:https://support.example.com --var FALLBACK_FORWARD:you@example.org
Email Routing становится MX домена, поэтому используйте домен или поддомен, который не обслуживает другой почтовый сервер.
Читать руководство по настройке →Не привязана к Cloudflare
Worker — один из способов вызвать /ingress/email. Любой почтовый сервер или релей может отправить исходное сообщение с теми же подписанными заголовками, а почтовый сервер, доставляющий в команду, может передать сообщение через конвейер в yuva ingest-email. Формат запроса описан в README Worker.
Вопросы и ответы
Нужно ли мне запускать почтовый сервер?
Не для входящей почты. Yuva не слушает SMTP: почту принимает Cloudflare Email Routing, а Worker передаёт её дальше. Для ответов нужна SMTP-учётная запись для почтового канала, например Amazon SES, Postmark или ваш собственный релей.
Что будет, если Yuva не работает?
Если задан FALLBACK_FORWARD, сообщение вместо этого пересылается на этот адрес. Без него доставка не удаётся, а отправляющий сервер может повторить попытку. Сообщения, которые Yuva отклоняет намеренно, например почта на неизвестный адрес, отклоняются, а не пересылаются.
Какие домены и адреса можно использовать?
Любой домен, которым вы управляете в Cloudflare и почту которого не обслуживает другой сервер, потому что Email Routing становится его MX. У каждого почтового канала есть адрес или универсальный адрес *@example.com для всех адресов домена, которых нет ни у одного канала в точности. Подадрес вроде support+billing@example.com попадает в канал адреса support@example.com.
Какого размера может быть сообщение?
Письмо может весить до 25 МиБ вместе с вложениями — это лимит Cloudflare Email Routing. Yuva сохраняет до 50 вложений в письме, каждое в пределах лимита размера вложений на сервере (по умолчанию 25 МиБ) и разрешённых типов; остальное отбрасывает.
Может ли кто-то подделать письма на мой сервер Yuva?
Yuva отклоняет любой запрос без действительной подписи HMAC или с меткой времени, отклоняющейся более чем на 5 минут, ещё до чтения тела. Держите секрет при себе.
Использует ли Yuva результат DMARC от Cloudflare?
Да, если задать YUVA_INGRESS_AUTHSERV_ID равным mx.cloudflare.net. Тогда Yuva читает вердикт DMARC, который добавляет Email Routing. Новый диалог, не прошедший DMARC, помечается как спам.
Cloudflare, логотип Cloudflare и Cloudflare Workers являются товарными знаками и/или зарегистрированными товарными знаками Cloudflare, Inc. в Соединённых Штатах и других юрисдикциях. Yuva — независимый проект с открытым кодом, не связанный с Cloudflare и не одобренный ею.