2015-05-06 30 views
11

Sto cercando la lunghezza massima consentita per un campo ID messaggio Internet per scopi di convalida all'interno di un'applicazione. Ho esaminato fonti come RFC-2822 e Wikipedia "Message-ID" e this SO question, oltre ad altri luoghi. La risposta più vicina che riesco a trovare è "998 caratteri" perché è la lunghezza massima consentita dalla specifica per ogni riga in un messaggio Internet (da RFC-2822) e il campo ID messaggio non può essere costituito da più righe.Numero massimo di email Internet Lunghezza ID messaggio

998 caratteri è la risposta definitiva? Non esiste un limite del genere?

risposta

9

Se c'è una cosa che ho imparato sull'e-mail, deve essere che si tratta di un sistema ampiamente distribuito per il software di posta elettronica fuzzing. Cioè, non importa quello che dicono le RFC, troverete e-mail che li violano, alcuni software di gestione e-mail di coping e alcuni errori. Penso che la maggior parte zoppicherà con il robustness principle in mente.

Con questo fuori strada, penso che la lunghezza massima di messaggio ID conforme a RFC sia di 995 caratteri.

La lunghezza massima della linea per la RFC citata è di 998 caratteri. Ciò includerebbe il nome del campo "ID messaggio:", ma è possibile eseguire il piegamento della linea tra il nome del campo e il corpo del campo. La riga contenente l'ID messaggio effettivo conterrebbe quindi uno spazio (lo spazio vuoto di piegatura), "<", ID messaggio e ">". Semanticamente, le parentesi angolari non fanno parte dell'ID messaggio. Pertanto si finisce con un massimo di 998 - 3 = 995 caratteri.

2

In realtà non c'è limite

rfc2282 definisce queste produzioni:

message-id  =  "Message-ID:" msg-id CRLF 

msg-id   =  [CFWS] "<" id-left "@" id-right ">" [CFWS] 

id-left   =  dot-atom-text/no-fold-quote/obs-id-left 

obs-id-left  =  local-part 

local-part  =  dot-atom/quoted-string/obs-local-part 

quoted-string =  [CFWS] 
         DQUOTE *([FWS] qcontent) [FWS] DQUOTE 
         [CFWS] 

CFWS   =  *([FWS] comment) (([FWS] comment)/FWS) 

FWS    =  ([*WSP CRLF] 1*WSP)/ ; Folding white space 

Così id-left può essere local-part che può essere quoted-string (e quindi avere più FWS) in modo da poter piegare il numero di volte necessario per adattarsi a qualsiasi lunghezza arbitraria di payload e comunque rispettare le restrizioni date dalla RFC.

+0

Ovviamente, se si sceglie di accettare messaggi arbitrari conformi a RFC-822, non impone nemmeno una lunghezza massima della linea. – Jani