К обсуждениям

Python 3.15 RC1: как проверить non-ASCII mailbox перед flatten EmailMessage

Редакция VOne Технологии

Практическая проверка Python 3.15 RC1: как проверить EmailMessage с non-ASCII адресом и выбрать utf8 policy в Python 3.15 без недоставляемого письма. Изолированный fixture, отрицательный контроль, таблица наблюдений, критерий остановки и безопасный пакет для поддержки.

Граница изменения: как проверить non-ASCII mailbox перед flatten EmailMessage

В Python 3.15 email generator выдаёт ошибку, если non-ASCII mailbox нельзя корректно flatten при policy utf8=False; для EAI рассматривается EmailPolicy.utf8. Это исправляет недоставляемое RFC 2047 кодирование addr-spec из gh-122540. Это подтверждает интерфейс Python 3.15 RC1, но не наличие проблемы в вашем проекте. Практический риск здесь конкретный: Тест заголовка как красивой строки не показывает байты на выходе. Старое поведение могло создать синтаксически выглядящий, но недоставляемый адрес; бездумное включение UTF-8 не доказывает поддержку SMTP-сервера. Перед опытом запишите версию Python, одну наблюдаемую величину и ожидаемую ветку. RC1 остаётся предварительным выпуском: установите его в отдельный virtual environment или контейнер, не поверх рабочего interpreter. Не переносите в стенд production-конфиги, реальные адреса, tokens, полные environment dumps и пользовательские данные.

Обратимый стенд для gh-122540

Рекомендуемый минимальный опыт: Соберите три синтетических сообщения: ASCII mailbox, Unicode только в display name и Unicode внутри local-part. Для каждого выполните as_bytes с прежней policy и с явно выбранной SMTPUTF8 policy, фиксируя исключение, заголовки и наличие SMTPUTF8 в требованиях транспорта отдельно. Все входы должны быть синтетическими, короткими и воспроизводимыми. Каждый вариант получает новый объект, файл или процесс, если cache и global state способны изменить наблюдение. Ограничьте время, размер временных файлов и число повторов заранее; cleanup выполняйте в finally и удаляйте только созданный temp-root. Один запуск показывает конкретный результат, но не частоту проблемы и не готовность всего приложения к миграции.

Контроль и таблица наблюдений

Собирайте строки «случай адреса | policy.utf8 | as_bytes | тип исключения | заголовок To | требование к transport». Не отправляйте письма. Отрицательный контроль с ASCII mailbox должен flatten одинаково в обеих policy; это отделяет EAI-границу от общей ошибки построения сообщения. Порядок baseline, target, fresh baseline помогает увидеть загрязнение стенда. Пустое поле не равно нулю, отсутствие исключения не подтверждает правильный результат, а изменение двух независимых параметров сразу лишает опыт диагностической силы. Если повторы расходятся, сохраните все строки и пометьте результат unstable, не выбирая самый удобный прогон.

Зелёный критерий и стоп-линия

Passed допустим только если ASCII-контроль стабилен, неподдерживаемая non-ASCII ветка завершается явной ошибкой до отправки, а UTF-8 ветка используется только если контракт транспорта действительно разрешает SMTPUTF8. Статус not reproduced означает лишь отсутствие симптома на этом fixture; blocked — нехватку capability или источника; failed control возвращает проверку к стенду. Стоп-линия: Не включайте SMTPUTF8 глобально и не подменяйте адрес транслитерацией без согласованной политики идентичности и подтверждения почтовой инфраструктуры. Нельзя получать зелёный результат broad except, отключением защиты, увеличением лимита до исчезновения ошибки или повторением до случайного успеха. Любая новая гипотеза получает отдельную строку, а не добавляется задним числом в объяснение уже выполненного опыта.

Минимальный пакет для поддержки

Передайте maintainer только три вымышленных адреса example.invalid, названия policy, типы исключений и обезличенные header bytes без реальных получателей. Добавьте московский timestamp, точную версию 3.15.0rc1, команды воспроизведения и заранее заданный зелёный критерий. Удалите usernames, hostnames, IP, абсолютные домашние пути, токены, cookies, содержимое рабочих файлов и лишние строки журналов. Официальные и первичные источники подтверждают gh-122540 и change boundary, но не подтверждают результат вашего опыта, массовость боли, будущую индексацию или позиции страницы. Такой пакет позволяет повторить одну ветку без раскрытия данных и без смешения соседних причин.

Материал подготовлен редакцией VOne с помощью ИИ по открытым официальным и первичным источникам; факты, даты и ссылки перепроверены. Реальные пользовательские данные и вымышленные результаты тестов не использовались.

Источники и проверка

Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.

Ответы

0 опубликовано
Ответов пока нет. Вы можете начать обсуждение.

Ваш ответ

Добавьте свой опыт или уточнение по теме.

Вы публикуете как Аноним Аватар отличает разговоры, но не раскрывает личные данные.

Ответ появится сразу. Не публикуйте личные данные, ключи и приватные ссылки.