Перейти до вмісту
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 й не схвалений нею.