Какое ограничение длины темы письма?

227

Сколько символов должно быть в строке темы электронной почты в Интернете? У меня было сканирование RFC для электронной почты, но я не мог точно определить, как долго это будет разрешено. У меня есть коллега, который хочет программно подтвердить это.

Если нет формального предела, какую длину на практике предложить?

Скотт Фергюсон
источник
17
255 - это ограничение для некоторых продуктов для продажи билетов (например, Jira), и, похоже, это ограничение на перспективы, thunderbird и gmail, похоже,
урезаются
1
RFC2047 лучше подходит для проверки, я вижу много программ для массовой рассылки, создающих недопустимый контент RFC2047.
Jasen
3
В базах данных очень часто (можно сказать, традиция) определять длину не особенно длинных или коротких текстовых полей как VARCHAR (255) или аналогичные эквивалентные имена. Если представлена ​​более длинная строка, она выдаст ошибку или просто будет усечена до предела. Вот почему Jira и Outlook, как упомянуто здесь, не поддерживают больше символов. По причинам совместимости я бы не рекомендовал 255+. Просто добавьте немного сливок на 5-летний торт;)
Alph.Dev

Ответы:

195

См. RFC 2822 , раздел 2.1.1 для начала.

Существует два ограничения, которые этот стандарт устанавливает для количества символов в строке. Каждая строка символов ДОЛЖНА быть не более 998 символов и ДОЛЖНА быть не более 78 символов, исключая CRLF.

Как будет сказано в RFC позже, вы можете обойти это ограничение (не так, как нужно), сложив объект в несколько строк.

Каждое поле заголовка логически представляет собой одну строку символов, содержащую имя поля, двоеточие и тело поля. Для удобства, однако, и для того, чтобы справиться с ограничениями в 998/78 символов на строку, часть тела поля поля заголовка может быть разбита на многострочное представление; это называется «складывание». Общее правило заключается в том, что там, где этот стандарт допускает складывание пробелов (а не просто символов WSP), CRLF может быть вставлен перед любым WSP. Например, поле заголовка:

       Subject: This is a test

может быть представлен как:

       Subject: This
        is a test

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

Майкл Петротта
источник
8
Текущую версию спецификации МВФ, RFC 5322, можно найти здесь: tools.ietf.org/html/rfc5322#section-2.1.1
james.garriss
6
Этот ответ касается только ограничения длины строки, а не общего ограничения длины.
Мел
1
Есть RFC и есть юзабилити. Jakob Nielsen article E-mail Subject Lines: 5 советов для привлечения читателей : «Сосредоточьтесь на первых 40 символах. Описательные и хорошо написанные сюжетные линии позволяют получателям принять информированное решение, чтобы получить больше информации или двигаться дальше».
Эдуард Лопес
3
Для пояснения, для строк темы нет ограничения по длине, поскольку стандарты разрешают заголовки длиннее 998 байт, оборачивая один заголовок в любое количество строк. Рекомендация из ~ 80 символов действительно разумна. Если вы пишете почтовый клиент, вы должны быть в состоянии справиться со смехотворно длинными объектами, не разбиваясь ужасным образом, предпочтительно путем усечения при отображении в виде списка.
Томасруттер
1
... Это также относится и к любому другому полю заголовка (например, «От»). PS Если вам интересно, почему 78 вместо 80 или 998 вместо 1000, это потому, что в стандарте электронной почты в качестве разделителя указывается CRLF (\ r \ n), то есть два байта, что составляет 1000 байтов на строку, из которых 998 сам заголовок. Также обратите внимание, что имя заголовка и любой пробел после двоеточия, например, "Subject:", также должны вписываться в это.
Томасруттер
20

RFC2322 утверждает, что заголовок темы "не имеет ограничения по длине"

но для получения длинных заголовков, но вам нужно разбить его на несколько строк, процесс называется «сворачивание».

субъект определен как "неструктурированный" в RFC 5322

вот некоторые цитаты ([...] указывают материал, который я пропустил)

3.6.5. Informational Fields
  The informational fields are all optional.  The "Subject:" and
  "Comments:" fields are unstructured fields as defined in section
  2.2.1, [...]

2.2.1. Unstructured Header Field Bodies
  Some field bodies in this specification are defined simply as
  "unstructured" (which is specified in section 3.2.5 as any printable
  US-ASCII characters plus white space characters) with no further
  restrictions.  These are referred to as unstructured field bodies.
  Semantically, unstructured field bodies are simply to be treated as a
  single line of characters with no further processing (except for
  "folding" and "unfolding" as described in section 2.2.3).

2.2.3  [...]  An unfolded header field has no length restriction and
  therefore may be indeterminately long.
Jasen
источник
@jasen вы знаете инструмент для складывания?
Махди
любая хорошо написанная электронная библиотека сделает это. мой любимыйc-client
Jasen
Это правильный ответ. Вторая часть вопроса «хорошая длина на практике» полностью зависит от вашего приложения. Если вы сохраняете полученные письма, вы должны поддерживать неограниченную длину.
Роб
4

после некоторого теста: если вы отправите электронное письмо клиенту Outlook, и тема будет> 77 символов, и его необходимо использовать "=?ISO"внутри темы (в моем случае из-за акцентов), тогда OutLook «обрежет» тему в середине это и меш это все, что следует после, включая основной текст, присоединения, и т.д ... все меш!

У меня есть несколько примеров, подобных этому:

Subject: =?ISO-8859-1?Q?Actas de la obra N=BA.20100154 (Expediente N=BA.20100182) "NUEVA RED FERROVIARIA.=

TRAMO=20BEASAIN=20OESTE(Pedido=20PC10/00123-125),=20BEASAIN".?=

Для того, чтобы:

Как вы видите, в строке темы он обрезал символ 78 с помощью символа "=", за которым следовали 2 или 3 перевода строки, а затем продолжил с остальной темой.

Мне сообщили от нескольких клиентов, которые все, кто использует OutLook, другие почтовые клиенты хорошо справляются с этими вопросами.

Если у вас нет ISO, это не повредит, но если вы добавите его в свой предмет, чтобы быть в курсе RFC, то вы получите этот сюрприз от OutLook. Если вы не добавите ISO-образы, то электронная почта iPhone не поймет этого (и прикрепить файлы с именами, используя такие символы, не будет работать на iPhone).

Sergio
источник
5
Существует много проблем с темой, которую вы задали: 1. Пробелы должны быть закодированы с помощью _, 2. Кодированное слово (=? Charset? Q / B? Data? =) Может быть длиной не более 75 символов (RFC2047). 3-й Нельзя экранировать новую строку с символом '=' в конце строки (кодировка QP заголовка отличается от кодировки тела QP). Итог: это не вина Outlook.
Павел Лесниковский
2

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

Я думаю, что некоторые довольно общие ограничения для строк темы вообще (не только электронная почта):

  • 80 персонажей
  • 128 персонажей
  • 256 символов

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

Надеюсь это поможет!

Эд Альторфер
источник
13
Нет особой причины, почему 256 лучше, чем 250, или 300, или 372. Мы давно уже не используем байты для длин строк.
Грег Хьюгилл
4
255 - это фактический предел для некоторых продуктов (например, Jira и outlook)
переназначение
5
Этот ответ неверен. RFC 5322, текущая версия спецификации IMF, четко определяет максимальную длину строки. Смотрите @ ответ Майкла.
james.garriss
2
+1 Ограничение длины строки для всех строк сообщения, но я не вижу ничего, что говорит о том, что тема не может иметь несколько строк (подразумевается, что количество символов для темы не ограничено). См. 2.2.3 и пример, который следует непосредственно после.
Cypher
1
VARCHAR 255, вероятно, самая распространенная (и более эффективная) длина столбца данных в MySQL / MariaDB. Байты наверняка все еще актуальны. MySQL будет использовать 1 байт для хранения длины, если она меньше 256 или больше в противном случае. Посмотрите, как C ++ реализует std :: string, если вы считаете, что длина строки не очень важна и считается в байтах.
ebyrob
0

Важно то, какой механизм вы используете, чтобы отправить электронное письмо. Большинство современных библиотек (например, System.Net.Mail) скрывают от вас сворачивание. Вы просто вставили очень длинную строку темы письма без (CR, LF, HTAB). Если вы начинаете пытаться сделать свой собственный фолд, все ставки сняты. Это начнет сообщать об ошибках. Поэтому, если у вас возникла эта проблема, просто отфильтруйте CR, LF, HTAB и дайте библиотеке сделать всю работу за вас. Обычно вы также можете установить тип текста кодирования в виде отдельного поля. Нет необходимости в iso-кодировании в строке темы.

kariato
источник