О сервисе CrazyMailing

CrazyMailing - сервис одноразовой почты, который делает маленькая независимая команда. Здесь нет отдела поддержки и нет презентации для инвесторов. Страницы пишут те же люди, которые смотрят на очередь писем и решают, какой домен пора выводить из ротации. Поэтому тексты похожи на записи из журнала работ, а не на рекламу.

Что сервис делает

Принимает почту. Это весь механизм целиком, и такая формулировка сразу отсекает большую часть того, что о временной почте принято думать.

Адрес на любом из наших доменов живой в ту секунду, когда он появился у вас на экране. Ни подтверждения, ни прогрева: запись существует, значит следующее письмо на этот адрес будет принято. Потом адрес истекает, и срок достаточно короткий, чтобы обещание не читать вашу переписку нам ничего не стоило.

Никто с этой стороны её и не читает. Дело не в добродетели, а в устройстве: содержимое удаляется по расписанию и изначально ни к какому имени не привязано.

Путь письма

Разобрать его по шагам стоит потому, что из этой схемы вытекают почти все ограничения, перечисленные ниже.

Приём берёт на себя Cloudflare. MX-записи наших доменов указывают на Cloudflare, а не на наш собственный почтовый сервер. В системе нет ни демона SMTP, ни открытого порта 25, и это убирает целый класс проблем, который традиционно преследует сервисы одноразовой почты.

Небольшая программа разбирает MIME. Всё, что тяжелее десяти мегабайт, она отбрасывает молча, без уведомления отправителю, потому что отбойник сообщил бы спамеру, что адрес живой. Вложение тяжелее пяти мегабайт пропускается, а само письмо при этом доходит. Тридцать пять исполняемых типов файлов не сохраняются никогда: exe, msi, bat, cmd, ps1, vbs, js, jar, apk, dmg, iso, scr, dll и остальная эта семья. Имя файла тоже приводится в порядок, ведь его писал отправитель: переводы строк, кавычки и слэши превращаются в подчёркивания, цепочки точек схлопываются, а всё, что длиннее ста двадцати знаков, обрезается.

Уцелевшие вложения уходят в объектное хранилище под ключом, собранным из адреса получателя и случайного идентификатора, так что угадать, где лежит чужой файл, нельзя. Отдаются они всегда как загрузка и никогда не показываются внутри страницы, а ссылка подписана и живёт пять минут.

Разобранное письмо приходит к нам подписанным. Передача несёт HMAC-подпись по времени и телу запроса, и всё, что старше пяти минут, отклоняется, поэтому перехваченный запрос нельзя повторить позже.

Ваша открытая вкладка узнаёт о письме сразу. База отдаёт уведомление, веб-процесс уже слушает, и письмо едет по соединению, которое было открыто ещё до его прихода. Опроса нет вообще. Предыдущее поколение этого сервиса делало двадцать шесть тысяч опрашивающих запросов в сутки на каждый сайт, и каждый будил сервер ради ответа «нет, пока ничего». Одно это решение стоило дороже, чем всё остальное вместе взятое.

Перед показом HTML письма урезается до белого списка тегов. Скрипты, стили, встроенные фреймы и инлайновое оформление удаляются вместе с содержимым, ссылки допускаются только веб- и почтовые, так что адрес вида javascript: или data: не проходит, а то, что осталось, рисуется в изолированном фрейме. Письмо пишет незнакомый человек, а показывается оно на нашем домене, и это делает санитайзер самым важным куском кода во всём сервисе.

Одну вещь он не убирает, и мы предпочитаем сказать об этом прямо: картинки, лежащие на сервере отправителя, загружаются. Значит, рассылка видит факт открытия письма. Если это для вас имеет значение, отключите загрузку картинок в браузере.

Почему адреса выглядят как настоящие имена

Генератор выдаёт что-нибудь вроде quietriver2841 или mia.reid7395, но никогда temp, trash или случайный набор букв. Адрес, который сам объявляет о своей одноразовости, отфильтруют на стороне получателя ещё до того, как дело дойдёт до проверки домена. Рандомная почта из бессмысленных символов в этом смысле хуже всего: она не проходит даже простейшие эвристики.

Четыре цифры в конце несут нагрузку. Гостевой ящик открывается по одному знанию адреса, это осознанный размен, и он работает, только пока адрес нельзя угадать. Две цифры оставили бы около трёхсот пятидесяти тысяч комбинаций на домен, а такое пространство скрипт перебирает за вечер, попутно читая всё, что найдёт. Четыре цифры поднимают его выше тридцати пяти миллионов, и занятие перестаёт окупаться. При этом адрес по-прежнему можно продиктовать вслух, чего про случайную строку не скажешь.

Девять доменов и скорость выгорания

На момент написания в ротации девять публичных доменов, и число это меняется.

Каждый проходит один и тот же путь: его замечают, он попадает в списки, к которым обращаются формы регистрации, и с этого момента растущая доля сайтов его отвергает. Мы выводим домен из оборота и ставим другой. Уход происходит в два этапа, а не в один, потому что резко отключённый домен оставил бы людей посреди регистрации. На первом этапе он исчезает с главной страницы, но продолжает доставлять почту на все выданные с него адреса. И только на втором перестаёт работать совсем.

Эта скорость выгорания не дефект работы, она и есть работа. Единственный честный способ вести такой сервис - закладывать смерть доменов в план, а не обещать, что адрес, скопированный сегодня, примут весной. Аккаунты берут домены из набора, который мы нигде не публикуем, и это замедляет процесс, но не отменяет его.

Почему сайт объясняет обратную сторону формы регистрации

Выдать адрес готовы десятки сайтов. Очень немногие объяснят, что происходит с ним после того, как вы вставите его в форму, почему форма иногда отвергает его на месте и кто принял это решение.

Мы в необычном положении: нас как раз и определяют. Мы видим, как наши домены пробуют, как они появляются в публичных списках и как начинают отказывать на конкретных формах, и можем измерить длительность каждой стадии. Материалы в руководствах выросли отсюда, а не из инструмента подбора ключевых слов.

Мысль, на которой всё держится, простая. Каждая форма регистрации - это база данных, а адрес - поле, по которому она найдёт вас снова.

На что это живёт

На рекламе, и больше ни на чём. Платного тарифа нет, обратного отсчёта нет, страницы с апгрейдом нет, а значит здесь ничего не сломано намеренно, чтобы продать вам работающую версию.

Чего мы не собираем

В базе нет колонки для IP-адреса, а за базой нет журнала доступа. Гостевой ящик держится случайным токеном в cookie, а не чем-то, что указывает на человека, и этот токен не связан ни с именем, ни с устройством, ни с местом. Практическое следствие описано на странице контактов: когда кто-то требует сообщить, кто пользовался адресом, отдавать нечего, а когда вы сообщаете об ошибке, найти вашу сессию мы тоже не можем.

Ограничения, которые мы не будем замалчивать

Отправлять письма отсюда нельзя. Ни сегодня, ни в следующей версии. Сервис, позволяющий незнакомцам отправлять, становится спам-релеем примерно за неделю, а последующие блокировки утащат за собой и приёмную часть.

Гостевой ящик не приватен. Адрес - единственный ключ к нему, и ящик откроется тому, кто наберёт правильный адрес. Если содержимое в чужих руках вас смутит, войдите в аккаунт и работайте с ящиком, привязанным к нему.

Домены отказывают без предупреждения. Форма, принявшая ваш адрес в прошлом месяце, сегодня может его отвергнуть, и обжаловать это негде: решение принимает третья сторона на основании списка, к которому мы не имеем отношения.

Истекает всё, включая то, что вы хотели сохранить. Гостевой ящик живёт сутки с последнего визита, ящик аккаунта - неделю с последнего входа, и ни одно письмо не переживает тридцати суток, что бы вы ни делали.

Это неподходящий инструмент для всего, куда придётся возвращаться. Банк, налоговая, работа, доставка, регистрация домена, облачное хранилище: адрес для восстановления обязан пережить аккаунт, а здесь каждый адрес построен ровно наоборот. Полностью это разобрано в отказе от ответственности.

Ошибки, жалобы на злоупотребления и исправления - на страницу контактов. Исправления особенно приветствуются: мы предпочтём поправить неверную фразу, а не спорить с тем, кто её заметил.

Читайте дальше

Все статьи