Як влаштований сервіс тимчасової пошти: шлях листа від 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 видаляє весь зовнішній вміст перед показом, тож цей піксель не завантажується ніколи.

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

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

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

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

Крок 5. Завершення терміну дії означає справжнє видалення

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

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

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

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