Giới hạn chiều dài chủ đề email là gì?


227

Có bao nhiêu ký tự được phép nằm trong dòng chủ đề của email Internet? Tôi đã quét RFC để nhận email nhưng không thể thấy cụ thể thời gian được phép là bao lâu. Tôi có một đồng nghiệp muốn lập trình xác nhận cho nó.

Nếu không có giới hạn chính thức, độ dài tốt trong thực tế để đề xuất là gì?


17
255 là giới hạn đối với một số sản phẩm bán vé (ví dụ Jira) và dường như là giới hạn về triển vọng, thunderbird và gmail dường như cắt ngắn sau 130.
chỉnh lại

1
RFC2047 phù hợp hơn với xác nhận, tôi thấy rất nhiều phần mềm gửi thư hàng loạt sản xuất nội dung RFC2047 không hợp lệ.
Jasen

3
Trong cơ sở dữ liệu, rất phổ biến (một truyền thống bạn có thể nói) để xác định độ dài của các trường văn bản không đặc biệt dài hoặc ngắn như VARCHAR (255) hoặc các tên tương đương. Nếu một chuỗi dài hơn được trình bày, nó sẽ tạo ra một lỗi hoặc đơn giản là sẽ bị cắt ngắn đến giới hạn. Đó là lý do tại sao Jira và Outlook như được đề cập ở đây không hỗ trợ thêm ký tự. Vì lý do tương thích, tôi không khuyên dùng 255+ Chỉ cần thêm một ít kem vào bánh 5 tuổi;)
Alph.Dev

Câu trả lời:


195

Xem RFC 2822 , mục 2.1.1 để bắt đầu.

Có hai giới hạn mà tiêu chuẩn này đặt vào số lượng ký tự trong một dòng. Mỗi dòng ký tự PHẢI không quá 998 ký tự và NÊN không quá 78 ký tự, ngoại trừ CRLF.

Vì RFC tuyên bố sau, bạn có thể làm việc xung quanh giới hạn này (không phải là bạn nên) bằng cách gấp đối tượng qua nhiều dòng.

Mỗi trường tiêu đề là một dòng ký tự duy nhất bao gồm tên trường, dấu hai chấm và thân trường. Tuy nhiên, để thuận tiện và để giải quyết các giới hạn ký tự 998/78 trên mỗi dòng, phần thân trường của trường tiêu đề có thể được chia thành một biểu diễn nhiều dòng; cái này được gọi là "gấp". Nguyên tắc chung là bất cứ nơi nào tiêu chuẩn này cho phép gấp khoảng trắng (không chỉ đơn giản là các ký tự WSP), CRLF có thể được chèn trước bất kỳ WSP nào. Ví dụ: trường tiêu đề:

       Subject: This is a test

có thể được biểu diễn dưới dạng:

       Subject: This
        is a test

Đề xuất cho không quá 78 ký tự trong tiêu đề chủ đề nghe có vẻ hợp lý. Không ai muốn cuộn để xem toàn bộ dòng chủ đề, và một cái gì đó quan trọng có thể bị cắt ở bên phải.


8
Phiên bản hiện tại của thông số IMF, RFC 5322, có thể được tìm thấy ở đây: tools.ietf.org/html/rfc5322#section-2.1.1
james.garriss

6
Câu trả lời này chỉ giải quyết giới hạn độ dài dòng, không phải giới hạn chiều dài tổng thể.
Phấn

1
Có RFC và có khả năng sử dụng. Bài viết của Jakob Nielsen Email Dòng chủ đề: 5 mẹo để thu hút người đọc tóm tắt là: "Tập trung vào 40 ký tự đầu tiên. Dòng chủ đề mô tả và được viết tốt cho phép người nhận đưa ra quyết định sáng suốt để biết thêm chi tiết hoặc tiếp tục."
Édouard Lopez

3
Để làm rõ, không có giới hạn độ dài cho các dòng chủ đề, vì các tiêu chuẩn cho phép các tiêu đề dài hơn 998 byte bằng cách gói một tiêu đề duy nhất trên bao nhiêu dòng tùy thích. Đề xuất ~ 80 ký tự thực sự là một điều hợp lý. Nếu bạn đang viết một ứng dụng email, bạn phải có khả năng đối phó với các chủ đề dài một cách lố bịch mà không vi phạm một cách khủng khiếp, tốt nhất là bằng cách cắt ngắn khi hiển thị như một phần của danh sách.
thomasrutter

1
... Đây cũng là trường hợp với bất kỳ trường tiêu đề nào khác (ví dụ "Từ"). PS nếu bạn đang tự hỏi tại sao 78 thay vì 80 hoặc tại sao 998 thay vì 1000, thì vì tiêu chuẩn email chỉ định CRLF (\ r \ n) là dấu phân cách, là hai byte, tạo thành 1000 byte trên mỗi dòng trong đó 998 là tiêu đề chính nó. Cũng lưu ý rằng tên của tiêu đề và bất kỳ khoảng trắng nào sau dấu hai chấm, ví dụ "Chủ đề:" cũng phải phù hợp với điều này.
thomasrutter

20

RFC2322 nói rằng tiêu đề chủ đề "không hạn chế độ dài"

nhưng để tạo ra các tiêu đề dài nhưng bạn cần chia nó thành nhiều dòng, một quá trình gọi là "gấp".

chủ đề được định nghĩa là "không cấu trúc" trong RFC 5322

đây là một số trích dẫn ([...] chỉ ra những thứ tôi đã bỏ qua)

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 bạn có biết một công cụ để gấp không?
mahdi

bất kỳ thư viện email bằng văn bản tốt sẽ làm điều này. yêu thích của tôi làc-client
Jasen

Đây là câu trả lời chính xác. Phần thứ 2 của câu hỏi "độ dài tốt trong thực tế" hoàn toàn phụ thuộc vào ứng dụng của bạn. Nếu bạn đang lưu email nhận được thì bạn phải hỗ trợ độ dài không giới hạn.
Cướp

4

sau một số thử nghiệm: Nếu bạn gửi email đến một khách hàng triển vọng và chủ đề là> 77 ký tự và nó cần sử dụng "=?ISO"bên trong chủ đề (trong trường hợp của tôi vì dấu), OutLook sẽ "cắt" chủ đề ở giữa nó và chia lưới tất cả những gì xuất hiện sau đó, bao gồm cả văn bản cơ thể, tài liệu đính kèm, v.v ... tất cả đều là lưới!

Tôi có một vài ví dụ như thế này:

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".?=

Đến:

Như bạn thấy, trong dòng chủ đề, nó đã cắt trên char 78 với dấu "=" theo sau là 2 hoặc 3 nguồn cấp dữ liệu, sau đó tiếp tục với phần còn lại của chủ đề một cách tồi tệ.

Nó đã được báo cáo cho tôi từ một số khách hàng, những người sử dụng OutLook, các khách hàng email khác xử lý các chủ đề đó đều ổn.

Nếu bạn không có ISO trên đó, điều đó không gây hại gì, nhưng nếu bạn thêm nó vào chủ đề của mình để trở nên tốt đẹp với RFC, thì bạn sẽ nhận được điều bất ngờ này từ OutLook. Bit nếu bạn không thêm ISO, thì email iPhone sẽ không hiểu được nó (và đính kèm các tệp có tên bằng các ký tự đó sẽ không hoạt động trên iPhone).


5
Có nhiều vấn đề với chủ đề bạn đặt: 1. Không gian được mã hóa bằng '_', 2. Một từ 'được mã hóa' (=? Bộ ký tự? Q / B? Data? =) Có thể không dài hơn 75 ký tự (rfc2047). Thứ 3 Bạn không thể thoát dòng mới với '=' char ở cuối dòng (mã hóa QP tiêu đề khác với QP cơ thể). Điểm mấu chốt là: đó không phải là lỗi của Outlook.
Pawel Lesnikowski

2

Tôi không tin rằng có một giới hạn chính thức ở đây và tôi khá chắc chắn rằng không có bất kỳ giới hạn cứng nào được chỉ định trong RFC, như bạn đã tìm thấy.

Tôi nghĩ rằng một số hạn chế khá phổ biến đối với các dòng chủ đề nói chung (không chỉ e-mail) là:

  • 80 ký tự
  • 128 ký tự
  • 256 ký tự

Rõ ràng, bạn muốn đưa ra một cái gì đó là hợp lý. Nếu bạn đang viết một ứng dụng email, bạn có thể muốn sử dụng 256 ký tự và rõ ràng kiểm tra kỹ các máy chủ thương mại lớn ngoài đó để đảm bảo chúng phục vụ thư của bạn một cách chính xác.

Hi vọng điêu nay co ich!


13
Không có lý do cụ thể tại sao 256 tốt hơn 250, hoặc 300 hoặc 372. Chúng ta đã sử dụng byte cho độ dài chuỗi.
Greg Hewgill

4
255 là giới hạn thực tế đối với một số sản phẩm (ví dụ như Jira và triển vọng)
recbot

5
Câu trả lời này là sai. RFC 5322, phiên bản hiện tại của thông số IMF, xác định rõ độ dài dòng tối đa. Xem câu trả lời của @ Michael.
james.garriss

2
+1 Giới hạn độ dài dòng dành cho tất cả các dòng của tin nhắn, nhưng tôi không thấy bất cứ điều gì nói rằng bạn không thể có một chủ đề trải dài nhiều dòng (ngụ ý không giới hạn số lượng ký tự cho chủ đề). Xem 2.2.3 và ví dụ tiếp theo ngay sau đó.
Cypher

1
VARCHAR 255 có lẽ là độ dài cột dữ liệu phổ biến nhất (và hiệu quả hơn) trong MySQL / MariaDB. Byte chắc chắn vẫn còn có liên quan. MySQL sẽ sử dụng 1 byte để lưu trữ độ dài nếu nó nhỏ hơn 256 hoặc nhiều hơn. Hãy xem cách C ++ thực hiện std :: string nếu bạn nghĩ độ dài chuỗi không quan trọng lắm và được tính bằng byte.
ebyrob

0

Điều quan trọng là cơ chế nào bạn đang sử dụng gửi email. Hầu hết các thư viện hiện đại (ví dụ System.Net.Mail) sẽ ẩn bạn. Bạn chỉ cần đặt một dòng tiêu đề email rất dài mà không có (CR, LF, HTAB). Nếu bạn bắt đầu cố gắng tự gấp, tất cả các cược đã tắt. Nó sẽ bắt đầu báo cáo lỗi. Vì vậy, nếu bạn gặp vấn đề này, chỉ cần lọc CR, LF, HTAB và để thư viện thực hiện công việc cho bạn. Bạn cũng thường có thể đặt loại văn bản mã hóa thành một trường riêng biệt. Không cần mã hóa iso trong dòng chủ đề.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.