Як влаштований сервіс тимчасової пошти: шлях листа від SMTP до вашого екрана
Команда PureTempMail
Інженери, які створюють і підтримують PureTempMail
Навіщо ми показуємо свій конвеєр
Більшість сервісів одноразової пошти — чорні скриньки. Ви вводите адресу, листи з'являються, а що відбувається між цими двома моментами — невідомо: хто бачить листи, де вони лежать і чи справді їх колись видаляють. А оскільки чесна відповідь на запитання «чи можна довіряти сервісу тимчасової пошти?» залежить саме від цих деталей, ми вирішили описати, як влаштований PureTempMail, — компонент за компонентом.
Усе описане нижче — це та сама робоча система, яка обслуговує цей сайт просто зараз, а не спрощена маркетингова схема. Текст написала команда, яка її збудувала й підтримує. Там, де ми йшли на компроміс, ми пояснюємо, який саме і чому.
Крок 1. Рукостискання SMTP — тут відсіюється більшість мотлоху
Кожен лист в інтернеті починається з SMTP-діалогу. На межі нашої мережі стоїть захищений SMTP-сервер, який слухає порт 25 і вмикає TLS для тих відправників, що його підтримують. Коли чужий поштовий сервер під'єднується й називає отримувача, ми не приймаємо лист наосліп.
На етапі RCPT TO — ще до передавання жодного байта вмісту — ми звіряємо адресу отримувача зі списком активних скриньок. Якщо такої адреси ніхто не створював або термін дії її скриньки вже сплив, з'єднання відхиляється просто на місці — постійною помилкою SMTP. Ми ніколи не приймаємо лист лише для того, щоб мовчки його викинути. У цьому ранньому відхиленні відображено і свідоме проєктне обмеження: PureTempMail працює лише на приймання. Надіслати лист з адреси PureTempMail неможливо, тож сервіс не вийде використати ні для спаму, ні для фішингу, ні для цькування.
Крок 2. Черга між прийманням і обробкою
Прийнятий лист не розбирають усередині SMTP-сервера. Натомість «сирий» лист одразу спрямовують у чергу повідомлень, а діалог SMTP на цьому завершується. Причина — у часі: сервер-відправник чекає на відповідь лічені секунди, тоді як розбір великого листа з вкладеннями може тривати значно довше. Через те, що ці два етапи розведено, сплеск вхідної пошти ніколи не обертається ні тайм-аутами, ні втраченими листами: черга поглинає пік, а обробник поступово його розгрібає.
Цей обробник розбирає структуру MIME: дістає тему, відправника, HTML- і текстову версії листа та вкладення. Вкладення лягають в ізольоване сховище під випадково згенерованими іменами — ніколи під тим іменем файлу, яке обрав відправник, — і це закриває цілий клас атак через підміну шляху. Метадані й тіла листів потрапляють у базу даних і прив'язуються до терміну життя скриньки.
Крок 3. Очищення HTML: щоб рекламні листи не могли за вами стежити
HTML-листи — найнебезпечніша частина будь-якої поштової скриньки. Типове маркетингове повідомлення містить зовнішні зображення (пікселі-трекери, що повідомляють, коли й де ви його відкрили), зовнішні таблиці стилів, а іноді й скрипти. Перш ніж показати вам лист, ми проганяємо його через очищувач HTML із суворим білим списком: скрипти вирізаються, зовнішні ресурси видаляються повністю, лишаються тільки безпечні вбудовані стилі. Піксель-трекер просто ніколи не завантажується, тож відправник так і не дізнається, чи відкривали лист.

Очищений результат показується всередині повністю ізольованого iframe — у пісочниці вашого браузера. Навіть якби щось шкідливе пережило очищення, пісочниця не дасть йому дотягнутися ні до сторінки навколо, ні до вашого сеансу зі скринькою, ні до чого іншого в браузері.
Крок 4. Доставка в реальному часі через Server-Sent Events
Більшість сайтів тимчасової пошти або змушують вас оновлювати сторінку, або кожні кілька секунд смикають сервер. PureTempMail тримає з вашого браузера одне довге HTTP-з'єднання за технологією Server-Sent Events (SSE). Щойно обробник дописав лист, цим з'єднанням іде подія — і лист з'являється у скриньці, зазвичай через одну-три секунди після відправлення. Там, де все вирішують секунди — коди двофакторної автентифікації, посилання активації з коротким терміном дії, — це відчутно.
З'єднання періодично надсилає сигнали живучості, щоб вчасно помітити обрив, а якщо мережа впала, клієнт перепід'єднується сам, із дедалі більшою паузою між спробами. Той самий потік подій живить і наші застосунки для Android та iOS, тож новий лист усі платформи бачать одночасно.
Крок 5. Завершення терміну дії означає справжнє видалення
Кожна скринька створюється з таймером зворотного відліку, який видно на екрані, і поки вона жива, термін можна подовжити. Коли термін дії спливає, до справи береться завдання очищення, що запускається кожні кілька хвилин: спершу з диска зникають файли вкладень, а потім каскадно видаляються рядки бази даних — і самої скриньки, і всіх її листів.
Немає ні архіву, ні резервних копій простроченої пошти, ні прапорця «м'якого видалення», який непомітно лишав би дані на місці. Це мінімізація даних, забезпечена самою архітектурою, а не лише написаною політикою: ми не можемо ні видати, ні злити, ні згубити те, чого більше не існує.
Ось і весь шлях: рукостискання SMTP, черга, розбір, очищення, надіслана подія і завдання на видалення. Кожен етап існує заради одного — щоб адреса, якою ви користуєтеся десять хвилин, не коштувала вам нічого потім. Якщо колись засумніваєтеся, чи не робить сервіс одноразової пошти чогось непевного з вашими листами, попросіть його опублікувати свій конвеєр. Ми щойно це зробили.
Хочете коротку версію цього конвеєра, без технічних подробиць? Подивіться, як PureTempMail працює крок за кроком