Что если email адрес превышает 256 символов после кодрования в base64

Здесь пишут, что максимальная длина почтового адреса в заголовках From и To включая <>, составляет 256 символов. А максимальная длина юзернейма (того, что до @) - 64 символа. При этом здесь пишут, что юзернейм может содержать некоторые utf-8 символы до 127-го (т.е. ascii) и любые другие. Но не-ascii символы полагается кодировать в base64 (например "йцукен" -> "=?utf-8?B?0LnQudGG0YPQutC10L0=?="). Вопрос тогда, что, если изначально длина адреса вместе с <> не превышала 256, но юзернейм содержал не-ascii символы и адрес стал превышать 256 символов после кодирования юзернейма в base64? Как такие случаи обрабатывать?


Ответы (1 шт):

Автор решения: Outtruder

5322 ограничивает длину доменной части в 255 байт и длину локальной в 64 байта. Современные стандарты позволяют использовать и в локальной и доменной частях адреса (в заголовках письма) некодированный никак utf-8, коль скоро для письма заявлен 8-битный content-transfer-encoding. Display-name при этом все равно рекомендовано кодировать согласно rfc 2047. Вот при передаче на транспорт (SMTP) и локальную и доменную части адресов (RCPT TO) рекомендуется кодировать в punycode.

Ну и наконец, соображения длины здесь вторичны. Если система получателя позволила создать пользователя с не-ascii именем в интернациональном домене, то как минимум она готова принять почту с таким адресатом. Проблемы возможны при показе в клиентском приложении получателя, но сегодня все поддерживают utf-8 и все транспорты нейтральны к 8 битам, потому я бы предпочел некодированный utf-8 в address-spec в заголовках письма.

→ Ссылка