2010-10-14 15 views
1

Je travaille sur un serveur qui traite le courrier électronique, et dans ce cadre, nous effectuons un certain encodage/encodage MIME. J'ai récemment eu un problème pour un message qui est valide sinon, mais contient un caractère Latin-1 dans un en-tête MIME. Quelqu'un a entré une adresse de messagerie à plusieurs destinataires contenant un caractère Latin-1, de sorte que l'enveloppe SMTP contient uniquement les destinataires valides, mais la ligne À contient toujours l'adresse non valide et la chaîne incorrectement codée.Les caractères binaires sont-ils légaux dans les en-têtes MIME?

J'ai eu l'impression que c'était illégal et que les en-têtes MIME devaient être en 7 bits. valeurs 8 bits dans les en-têtes MIME doivent être codés sous la forme

=?charset?encoding?encoded text?= 

L'en-tête en question est quelque chose comme ceci:

To: <changé[email protected]>, <[email protected]> 

Ma question est: Est-ce MIME valide et je viens Je ne sais pas à ce sujet?

Répondre

3

De RFC2822, Internet Message Format, section 2.2, tête Champs:

champs d'en-tête sont des lignes composées d'un nom de domaine, suivi d'un colon (":"), suivi d'un corps de champ et terminé par CRLF. Un champ DOIT être composé de caractères US-ASCII imprimables (c'est-à-dire caractères dont les valeurs sont comprises entre 33 et 126, inclusivement), sauf deux-points. Un corps de champ peut être composé de n'importe quels caractères US-ASCII, à l'exception de CR et LF. Cependant, un corps de champ peut contenir des CRLF lorsque est utilisé dans l'en-tête "pliage" et "dépliage" comme décrit dans la section 2.2.3. Tous les corps de champ DOIVENT se conformer à la syntaxe décrite dans les sections 3 et 4 de la présente norme, aux paragraphes .

Par conséquent, tous les caractères non-ASCII sont illégaux.

1

RFC 822 says:

address  = mailbox      ; one addressee 
mailbox  = addr-spec     ; simple address 
addr-spec = local-part "@" domain  ; global address 
local-part = word *("." word)    ; uninterpreted 
word  = atom/quoted-string  
atom  = 1*<any CHAR except specials, SPACE and CTLs> 
CHAR  = <any ASCII character>  ; ( 0-177, 0.-127.) 

got it? votre option est "cité-string" - =?charset?encoding?encoded text?=

+0

Ouais, je sais pertinemment que l'adresse est invalide, mais je ne cherche pas à analyser la ligne À lui-même pour l'interprétation. Je me demande simplement s'il est même possible d'avoir des caractères non-ASCII dans un en-tête MIME. –

+0

@Shawn D. RFC est clair: non – Andrey

0

adresses e-mail comme

changé[email protected] 

sont parfaitement légales si les caractères sont codés en UTF-8 et si le serveur prend en charge SMTPUTF8, une extension SMTP. Le serveur annonce un soutien en répondant à EHLO avec le mot-clé SMTPUTF8:

250-SMTPUTF8 

Le client utilise l'extension en ajoutant le paramètre SMTPUTF8 sur la commande MAIL:

MAIL FROM:<changé[email protected]> SMTPUTF8 

Malheureusement, il y a très peu de soutien cette extension en ce moment.

Voir RFC 6531 pour plus d'informations: http://tools.ietf.org/html/rfc6531