Bruce Lilly wrote:
msg-id = [CFWS] "<" id-left "@" id-right ">" [CFWS] ;
maximum length 250 octets excluding CFWS
id-left = dot-atom-text / no-fold-quote / obs-id-left
id-right = dot-atom-text / no-fold-literal / obs-id-right
no-fold-quote = DQUOTE *(qtext / printable-quoted-pair) DQUOTE
no-fold-literal = "[" *(dtext / printable-quoted-pair) "]"
printable-quoted-pair = ("\" pqtext) / obs-qp
pqtext = %d33-61 / ; Printable characters
excluding ">"
%d63-126 /
obs-text
dtext = DIGIT /
"A" / "B" / "C" / "D" / "E" / "F" / ;
hexadecimal digits, case-insensitive
"." / ; IPv4
separator
":" ; IPv6
separator
There's still an issue there via qtext in the no-fold-quote,
since qtext allows NO_WS_CTLs and '>'. That can be taken
care of by yet another specific production that has printable
characters except backslash, DQUOTE, and '>', but it would
be much simpler to do away with the no-fold-quote entirely
if that's feasible. For that matter, printable-quoted-pair
could probably be removed from no-fold-literal.