Какие ограничения по полям существуют в email-сообщениях?
Что проверяют
Знаете ли вы, откуда берутся лимиты в почте, и умеете ли превратить их в тестовые случаи с граничными значениями. Следом обычно просят набросать чек-лист для формы, которая отправляет письма, или для поля ввода email.
Как отвечать
Опорные стандарты: RFC 5322 описывает формат письма, RFC 5321 протокол SMTP. Конкретика, которую стоит назвать:
- адрес: локальная часть до 64 октетов, домен до 255, а весь адрес на практике не длиннее 254 символов из-за лимита SMTP-пути в 256 октетов вместе с угловыми скобками;
- строка: не больше 998 символов без CRLF, рекомендовано до 78. Длинный заголовок переносится (folding), поэтому
Subjectможет занимать несколько строк; - обязательные заголовки: по RFC 5322 обязательны только
DateиFrom.Toможет отсутствовать, например в письме только со скрытыми копиями; - получатели: сервер обязан принять не меньше 100 адресатов в одном письме, дальше действуют лимиты провайдера;
- размер: RFC 5322 его не ограничивает, сервер объявляет лимит расширением
SIZE. Вложения кодируются в Base64 и вырастают примерно на треть, поэтому файл в 20 МБ при лимите 25 МБ может не пройти; - не-ASCII: кириллица и эмодзи в заголовках кодируются по RFC 2047 (
=?UTF-8?B?...?=), кириллические домены идут через punycode, а юникод в локальной части требует поддержкиSMTPUTF8.
Отсюда тесты: 64 и 65 символов в локальной части, адрес на 254 и 255, тема с эмодзи, вложение у границы лимита с учётом кодирования. Проверять удобно на локальном SMTP вроде Mailpit или smtp4dev.
Где спотыкаются
Валидируют адрес «на глаз» и отсекают корректные: с + в локальной части или с длинным доменом верхнего уровня.
Не проверяют переносы строк в пользовательском вводе. Символы CRLF в поле темы позволяют дописать свой заголовок, например Bcc, это классическая инъекция.
Путают лимит формата с лимитом отображения. Длинная тема допустима, но почтовые клиенты обрезают её гораздо раньше, поэтому смысл письма должен умещаться в начало.