Email Inbox (receiving emails as notifications)
Email Inbox — это «почтовый ящик», у которого вместо вашего IMAP — канал Notifly. Создав ящик, вы получаете уникальный email-адрес: всё, что на него приходит, превращается в обычное уведомление с заголовком письма и его телом и доставляется во все ваши клиенты (web, Android, desktop) как любое другое push-сообщение.
Это удобно, когда внешняя система умеет только email и научить её ходить в HTTP — слишком дорого:
- алёрты от хостингов, биллингов, RBL и регистраторов;
- уведомления от CI/CD, системы бэкапов, сторонних SaaS;
- transactional email от вашего же бекенда (заказы, регистрации) без отдельного канала push;
- алёрты от старых железных мониторингов, которые умеют только SMTP.
How it works
Section titled “How it works”SMTP sender ──► <local>+<alias>@<domain> │ ▼ Yandex Cloud Mail Trigger │ ▼ Cloud Function notifly-email │ 1. extract alias from address (To / X-Original-To / Delivered-To) │ 2. find EmailInbox in YDB by alias │ 3. Subject → title, plain-body → message ▼ INSERT messages + push via WebSocket │ ▼ All your clients receive the notification- Маршрутизация — по subaddress-части
+aliasв локальной части адреса (postmaster+abc123@your-mail.yandexcloud.net) или по выделенному домену. - Хранение — таблица
email_inboxesв YDB с уникальным индексом поalias. - Push — то же самое, что у обычного
POST /message: моментальный фрейм по WebSocket плюс запись в БД для последующихGET /message.
Creating an inbox
Section titled “Creating an inbox”Via the admin UI
Section titled “Via the admin UI”- Open app.notifly.ru → Email Inbox.
- Click “Create inbox”, and fill in:
- Name — for display, e.g. “Alerts Reg.ru”.
- Channel — where to store incoming emails as notifications.
- A generated email address will appear in the table — this is the authentication. Copy it into the external service’s settings.
Via REST API
Section titled “Via REST API”curl -X POST "$NOTIFLY_URL/email-inbox" \ -H "Content-Type: application/json" \ -H "X-Gotify-Key: <client-token>" \ -d '{ "name": "Alerts Reg.ru", "appId": 12345 }'The response will include the inbox object with the emailAddress field filled:
{ "id": 17, "appId": 12345, "appName": "Operations", "name": "Alerts Reg.ru", "alias": "a3f9c2", "emailAddress": "postmaster+a3f9c2@your-mail.yandexcloud.net", "created": "2026-04-30T10:11:12Z", "lastUsed": null}Via MCP (for an AI assistant)
Section titled “Via MCP (for an AI assistant)”If you have configured the Notifly MCP server, simply ask:
Create an Email Inbox for the “Operations” channel named “Alerts Reg.ru” and send me the resulting address.
Any SMTP client sends an email to the obtained address — no authorization headers are required (alias itself is the secret). The minimal example:
# msmtp / mailxecho "Database hasn't been updated overnight — check replication." \ | mail -s "[ALERT] backups: lag > 24h" \ "postmaster+a3f9c2@your-mail.yandexcloud.net"From Python:
import smtplibfrom email.message import EmailMessage
msg = EmailMessage()msg["To"] = "postmaster+a3f9c2@your-mail.yandexcloud.net"msg["From"] = "alerts@example.com"msg["Subject"] = "[ALERT] backups: lag > 24h"msg.set_content("Database hasn't been updated overnight — check replication.")
with smtplib.SMTP("smtp.example.com", 587) as s: s.starttls() s.login("user", "pass") s.send_message(msg)What will appear in the notification
Section titled “What will appear in the notification”| Notification field | Source |
|---|---|
title | Email subject (Subject:) |
message | The text body of the email (text/plain part) |
priority | The channel’s default priority |
date | The time the email arrived in the Cloud Function |
The HTML part, if present, is discarded: the notification is a short plain-text. If the email is pure HTML, the textual branch of multipart/alternative will be used if present; otherwise — an empty string.
REST API
Section titled “REST API”| Method and path | Authorization | Purpose |
|---|---|---|
GET /email-inbox | client-token | list of inboxes |
POST /email-inbox | client-token (write) | create |
PUT /email-inbox/:id | client-token (write) | rename / change channel |
DELETE /email-inbox/:id | client-token (write) | delete |
POST accepts EmailInboxParams — {name, appId}.
The response always returns the full EmailInbox object, including the public
emailAddress (it’s convenient to copy it straight into the external system’s settings).
Limitations
Section titled “Limitations”- Plain-text only — HTML markup is ignored, attachments are not saved.
- Email size — within the limits of Yandex Cloud Mail Trigger.
- The address is case-sensitive with respect to the
alias(storedlower-case). - Under high load (>1 email/sec per inbox) notifications will arrive in batches — the Cloud Function scales, but Notifly does not deduplicate notifications automatically.