Як влаштований сервіс тимчасової пошти: шлях листа від SMTP до вашого екрана

К

Команда PureTempMail

Інженери, які створюють і підтримують PureTempMail

Навіщо ми показуємо свій конвеєр

Більшість сервісів одноразової пошти — чорні скриньки. Ви вводите адресу, листи з'являються, а що відбувається між цими моментами — невідомо: хто бачить повідомлення, де вони зберігаються і чи справді їх колись видаляють. Оскільки чесна відповідь на питання «чи можна довіряти сервісу тимчасової пошти?» повністю залежить від цих деталей, ми вирішили задокументувати, як саме працює PureTempMail — компонент за компонентом.

Усе описане нижче — це продакшен-система, яка обслуговує цей сайт просто зараз. Текст написала команда, що її побудувала й експлуатує, а не спрощена маркетингова схема. Там, де ми йшли на компроміс, ми кажемо, який він і чому.

Поштовий сервер відправника відкриває SMTP-з'єднання
Перевірка під час рукостискання — невідомі та прострочені адреси відхиляються
Прийнятий лист потрапляє до черги повідомлень
Парсинг і сувора санітизація HTML
Доставка до вашої скриньки в реальному часі
Шлях одного вхідного листа — кожен етап описано в цій статті.

Крок 1. SMTP-рукостискання — де гине більшість мотлоху

Кожен лист в інтернеті починається з SMTP-діалогу. На нашій межі працює захищений SMTP-сервер, що слухає порт 25 із TLS для відправників, які його підтримують. Коли поштовий сервер під'єднується і називає отримувача, ми не приймаємо повідомлення наосліп.

На етапі RCPT TO — ще до передавання жодного байта вмісту — ми звіряємо адресу отримувача зі списком активних скриньок. Якщо таку адресу ніхто не створював або її скринька вже вичерпала строк, з'єднання одразу відхиляється постійною SMTP-помилкою. Ми ніколи не приймаємо лист, щоб мовчки його викинути. Це раннє відхилення відображає і свідоме проєктне обмеження: PureTempMail працює лише на приймання. Надіслати лист з адреси PureTempMail неможливо, а отже, сервіс не можна використати для спаму, фішингу чи цькування.

Крок 2. Черга між прийманням і обробкою

Прийняте повідомлення не розбирається всередині SMTP-сервера. Натомість «сирий» лист спрямовується в чергу повідомлень, і SMTP-діалог негайно завершується. Причина — у часі: сервери-відправники чекають на відповідь секунди, тоді як розбір великого листа з вкладеннями може тривати значно довше. Розділення цих етапів означає, що сплеск вхідної пошти ніколи не спричиняє тайм-аутів чи втрачених листів — черга поглинає пік, а обробник поступово його опрацьовує.

Цей обробник розбирає MIME-структуру: видобуває тему, відправника, HTML- і текстову версії листа та вкладення. Вкладення записуються в ізольоване сховище під випадково згенерованими іменами — ніколи під іменем файлу, яке обрав відправник, що закриває цілий клас атак через маніпуляцію шляхами. Метадані й тіла повідомлень потрапляють у базу даних і прив'язуються до строку життя скриньки.

Крок 3. Санітизація HTML: маркетингові листи не зможуть вас відстежити

HTML-листи — найнебезпечніша частина будь-якої поштової скриньки. Типове маркетингове повідомлення містить зовнішні зображення (пікселі-трекери, що повідомляють, коли й де ви його відкрили), зовнішні таблиці стилів, а іноді й скрипти. Перш ніж показати вам лист, ми проганяємо його через HTML-санітайзер із суворим білим списком: скрипти вирізаються, зовнішні ресурси видаляються повністю, виживають лише безпечні вбудовані стилі. Піксель-трекер просто ніколи не завантажується, тому відправник не дізнається, чи було відкрито лист.

Макет маркетингового листа, створений для цієї статті: зовнішнє заголовне зображення, промокнопка заклику до дії та позначений прихований піксель-трекер 1x1
Макет маркетингового листа, який ми зібрали, щоб показати, що зазвичай потрапляє до скриньки: зовнішні зображення, кнопка заклику до дії та прихований піксель-трекер 1×1 (тут позначений). PureTempMail видаляє весь зовнішній вміст перед відображенням, тож цей піксель ніколи не завантажується.

Очищений результат потім відображається всередині повністю ізольованого (sandboxed) iframe у вашому браузері. Навіть якби щось шкідливе пережило санітизацію, пісочниця не дасть йому дістатися сторінки навколо, вашої сесії чи будь-чого іншого в браузері.

Крок 4. Доставка в реальному часі через Server-Sent Events

Більшість сайтів тимчасової пошти змушують оновлювати сторінку або опитують сервер кожні кілька секунд. PureTempMail тримає з вашого браузера одне довготривале HTTP-з'єднання за технологією Server-Sent Events (SSE). Щойно обробник завершує збереження повідомлення, цим з'єднанням надсилається подія, і лист з'являється у скриньці — зазвичай через одну–три секунди після надсилання. Для критичних до часу сценаріїв — кодів двофакторної автентифікації та посилань активації з коротким строком дії — ці секунди мають значення.

З'єднання передає періодичні heartbeat-сигнали, щоб виявляти розірвані з'єднання, а клієнт автоматично перепід'єднується з експоненційною затримкою в разі збоїв мережі. Той самий потік подій живить наші застосунки для Android та iOS, тож усі платформи бачать новий лист тієї самої миті.

Крок 5. Закінчення строку — це справжнє видалення

Кожна скринька створюється з видимим на екрані таймером зворотного відліку, і поки вона активна, строк можна подовжити. Коли скринька спливає, до справи береться завдання очищення, що запускається кожні кілька хвилин: спершу з диска видаляються файли вкладень, потім каскадно видаляються рядки бази даних скриньки та всіх її повідомлень.

Немає ні архіву, ні резервних копій простроченої пошти, ні прапорця «м'якого видалення», що непомітно зберігає дані. Це мінімізація даних, забезпечена архітектурою, а не лише політикою: ми не можемо видати, злити чи втратити те, чого більше не існує.

Ось і весь шлях: SMTP-рукостискання, черга, парсер, санітайзер, push-подія і завдання видалення. Кожен етап існує заради того, щоб адреса, якою ви користуєтеся десять хвилин, нічого не коштувала вам опісля. Якщо колись засумніваєтеся, чи не робить сервіс одноразової пошти щось сумнівне з вашими листами, — попросіть його опублікувати свій конвеєр. Ми щойно це зробили.

Волієте коротку нетехнічну версію цього конвеєра? Подивіться, як PureTempMail працює крок за кроком