Перейти к содержимому
Yuva

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. 1Клиент пишет на один из ваших адресов поддержки, например support@example.com.
  2. 2Cloudflare Email Routing принимает сообщение и передаёт его Yuva Email Worker.
  3. 3Worker подписывает исходное сообщение, оба адреса конверта и метку времени с помощью HMAC-SHA256 общим с Yuva секретом и отправляет их на /ingress/email вашего сервера Yuva.
  4. 4Прежде чем прочитать сообщение, Yuva проверяет подпись и то, что метка времени в пределах 5 минут. Запрос с неверной подписью отклоняется.
  5. 5Yuva находит почтовый канал по адресу получателя и по In-Reply-To и References добавляет сообщение в диалог, к которому оно относится. Всё остальное начинает новый диалог. Ответ снова открывает диалог.
  6. 6Ваша команда отвечает в панели. Ответ отправляется через собственную SMTP-учётную запись почтового канала, например Amazon SES, Postmark или ваш релей, с того же адреса и в той же цепочке. Ответы не проходят через Worker.

Отказы доходят до отправителя

Когда Yuva окончательно отклоняет сообщение, например из-за неизвестного адреса, заблокированного отправителя или слишком большого размера, Worker отклоняет его, а отправитель получает постоянную ошибку SMTP с причиной от Yuva.

Если Yuva недоступна

Если Yuva отвечает ошибкой сервера, не отвечает в течение 20 секунд или недоступна, Worker может переслать сообщение на выбранный вами адрес, если задан FALLBACK_FORWARD. Этот адрес должен быть проверенным получателем в Email Routing. Тогда сообщение придёт как обычное пересланное и не появится в Yuva. Без FALLBACK_FORWARD доставка завершится ошибкой, а отправляющий сервер может повторить попытку позже.

Настройте за несколько шагов

Вам нужны сервер Yuva и аккаунт Cloudflare, который управляет доменом.

  1. 1

    В Yuva откройте Настройки → ваш ящик → Каналы → Почта и добавьте адрес поддержки. Задайте на сервере секрет и перезапустите его:

    YUVA_INGRESS_SECRET=<openssl rand -hex 32>
    YUVA_INGRESS_AUTHSERV_ID=mx.cloudflare.net
  2. 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. 3

    В панели Cloudflare откройте свой домен → Email → Email Routing и включите его. Cloudflare добавит свои записи MX и SPF.

  4. 4

    В Routing rules направьте каждый адрес поддержки на Worker yuva-edge. Для универсального канала направьте на него универсальное правило.

  5. 5

    Отправьте тестовое сообщение и увидите, как диалог появится в панели.

  6. 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 и не одобренный ею.