Текстовая версия письма
HTML-макет сохранил текст и добавил иерархию. Теперь подготовим равнозначную текстовую версию TEXT-01. Она должна передавать тот же результат, ссылки и управление подпиской без зависимости от оформления. Результатом урока будет полный newsletter.txt и карта соответствия с HTML, а не автоматическая обрезка всех тегов.
Письмо NEWS-01 и контакт R001 остаются синтетическими. Приложение lesson-09 в архиве серии содержит локальные документы. Почтовая отправка, сборка MIME и просмотр в клиентах не выполнялись. Файл текста не является доказательством доставки или работающей отписки.
Смысловая эквивалентность
Сохраним предмет: новый разбор объясняет различие назначенного пути и состояния готовой страницы. Затем предпосылку: исходник и публичный адрес — разные объекты. После этого дадим полный демонстрационный URL урока и оглавления. В HTML подпись ссылки скрывает техническую строку; в plain text сам адрес должен быть видимым. Поэтому простое удаление тегов потеряет назначения переходов.
В нижней части повторим причину получения и обещанную частоту. Настройки и остановка получат отдельные подписанные строки. Смысл управления должен быть столь же доступен, как основная ссылка. Если текстовая версия содержит только заголовок и URL статьи, она не равнозначна HTML: читателю не объяснено, что подтверждено и как прекратить подборку. Короткий размер не оправдывает эту потерю.
| HTML-объект | Текстовый эквивалент | Что сохраняем |
|---|---|---|
| Заголовок | Первая предметная строка | Тему |
| Ссылка с подписью | Подпись и полный URL | Назначение |
| Абзац подписки | Обычный абзац | Причину получения |
| Настройки | Отдельная строка | Действие управления |
| Оговорка | Обычный текст | Статус учебного примера |
Пример преобразования
HTML-переход «Открыть разбор адреса страницы» превращается в две строки: подпись и https://professorweb.example/articles/route-source.html. Адрес демонстрационный, обработчик отсутствует. В текстовой версии это обозначено прямо. Нельзя заменить его ссылкой localhost и предположить, что получатель окажется в вашей локальной среде. Рабочее назначение будущего выпуска нужно сопоставить отдельно.
Для читаемости используем пустые строки между смысловыми частями. Не рисуем широкие таблицы символами и не выравниваем пробелами сложные колонки. Почтовое приложение может переносить строки по-своему. В нашем образце обычный связный текст и два основных назначения. Технический путь стоит отдельно, поэтому его легче копировать, но реальное поведение клиента не проверено.
Plain text не означает упрощённое объяснение. Если в HTML есть существенная предпосылка, она сохраняется и здесь. Если в HTML новая декоративная картинка, её нет необходимости описывать подробно, пока она не несёт единственный смысл. В нашем макете изображений вообще нет. Текстовая версия показывает, что основной результат не зависит от визуальной упаковки.
Заголовки доставки отличаются от содержимого. Subject задаёт тему сообщения в конверте, а newsletter.txt содержит тело. В редакторском образце тему можно записать отдельной строкой для человека, но это не автоматически готовый SMTP-заголовок. Кириллица и переносы должны быть обработаны корректно будущей библиотекой отправки. Мы не создаём сырой .eml и не заявляем правильность кодирования по факту сохранения UTF-8-файла.
Альтернативные представления
Стандарт MIME описывает multipart/alternative как альтернативные представления одного содержания; части располагаются в порядке предпочтения, а приложение выбирает поддерживаемую. В обычной схеме нашего будущего письма сначала идёт text/plain, затем text/html. Это техническая модель из RFC 2046, а не уже собранный конверт.
В приложении mime-plan.md хранит такую схему словами. Там нет транспортных заголовков, boundary, подписи или адресов реальных получателей. Для настоящей отправки библиотека должна сформировать корректные типы, кодирование и границы частей. Редактор отвечает за совпадение содержания, а техническая интеграция — за представление. Одно не следует автоматически из другого.
Альтернативы должны описывать одну версию письма. Если HTML обновлён, а text/plain содержит прежнюю ссылку или другое обещание, разные читатели получают разный смысл. Поэтому карта TEXT-01 ссылается на HTML-01 и NEWS-01. При существенной правке редактор просматривает обе части. Не стоит поддерживать два независимых текста только потому, что они лежат в отдельных файлах.
Есть и полезное различие: в тексте можно явно указать длинный адрес, а в HTML использовать понятную подпись. Это разница представления, не содержания. Причина перехода, объект и оговорка совпадают. Если один вариант содержит дополнительные рекламные предложения, он уже не является равнозначной версией выбранного письма. Нужен другой редакционный объект и проверка обещания.
Рецензия на потерю смысла
Предположим, автоматическое преобразование удалило href и оставило «Остановить подборку». Читатель понимает действие, но не может выполнить его даже в будущем реальном выпуске. Исправление — добавить подписанный полный URL в текстовую часть. В нашей лаборатории он по-прежнему демонстрационный, однако карта показывает требование к готовому сообщению. Это конкретная ошибка преобразования, не оценка эстетики.
Другой вариант: после удаления HTML все абзацы слились. Механизм остаётся, но порядок чтения хуже. Верните пустые строки и понятную последовательность. Не нужно изобретать новый текст с другим обещанием. Хорошая текстовая версия редактируется как самостоятельное представление той же задачи, поэтому она может быть ясной без сложных визуальных обозначений.
Проверьте соответствие по карте, а не только по одинаковому количеству слов. Предмет, предпосылка, две ссылки, причина получения и управление должны находиться в обоих вариантах. Размеры могут различаться из-за полных URL. Наличие всех элементов ещё не означает клиентскую совместимость: она требует отдельного просмотра, который в текущем режиме не выполняется.
Текстовая версия удобна и для проверки обещания без дизайна. Если после удаления цвета и размеров письмо выглядит как набор несвязанных ссылок, проблема содержится в редакторском маршруте, а не только в HTML. Верните переходы между ситуацией, объяснением и действием. Для NEWS-01 это последовательность от расхождения адреса к полному разбору. Plain text помогает увидеть эту связь, но не становится автоматической оценкой качества любой рассылки.
В after.json добавлен TEXT-01, его связь с HTML и схема будущего MIME. Файл содержит полный локальный текст, не проверенное отправленное сообщение. Поля провайдера и транспорта отсутствуют. Следующий урок отделит очередь, принятие письма сервером и неизвестное попадание в почтовую папку, чтобы редакция не называла подготовку успешной доставкой.