Scriu o mică bucată de software în PHP care se conectează la o cutie de e-mail IMAP și stochează mesajele conținute într-un MySQL DB pentru procesare ulterioară și alte bunătăți.

Am observat că în timpul testării apar câteva caractere ciudate care apar în corpul mesajului atunci când încerc să salvez corpul mesajului brut. Folosesc imap_fetchbody () pentru a extrage corpul mesajului.

Am observat că atunci când folosesc quoted_printable_decode () pentru a curăța corpul mesajului, acest lucru ajută! Totuși, făcând o mulțime de cercetări, am învățat, de asemenea, că acest lucru nu va ajuta întotdeauna și că ar trebui folosite în schimb alte metode, cum ar fi utf8_encode () și base64_decode (), pentru a curăța corpul mesajului.

Deci, întrebarea mea este: care este cea mai bună metodă pentru curățarea fiabilă a unui mesaj de e-mail cu php pentru a acoperi toate scenariile de codificare?

corpului

1 Răspuns 1

Un „corp de e-mail” este în prezent un copac de părți MIME individuale. Uneori există doar una dintre ele, de ex. un text/poștă simplă. Uneori există o multipartă/alternativă care înfășoară în interiorul său două copii „echivalente” ale mesajului, una ca text/simplu și alta ca text/html. Uneori structura este mult mai complicată, cu multe niveluri de cuibărit. Este destul de obișnuit ca unele dintre aceste părți să fie de fapt conținut binar, cum ar fi imagini, fișiere ZIP atașate și ce nu.

Fiecare dintre aceste piese individuale MIME poate fi codificată pentru transport; acestea sunt specificate în antetul Content-Transfer-Encoding al părții MIME corespunzătoare. Cele două scheme de codificare pe care trebuie să le acceptați în mod absolut pentru interoperare sunt cotate-tipărite și base64. O observație importantă este că această codificare se întâmplă separat pentru fiecare parte, adică este perfect legal să aveți o multipartă/alternativă cu un text/simplu codificat cu citat-imprimabil și o altă parte, text/html codificat în baza64 .

După ce ați decodat această codificare de transfer, trebuie totuși să decodificați textul din codarea caracterelor sale în Unicode, adică pentru a transforma fluxul de octeți în text Unicode. Trebuie să consultați parametrul de codificare al antetului MIME de tip conținut (din nou, antetul părții, nu antetul întregului mesaj, cu excepția cazului în care mesajul în sine are o singură parte).

Toate detaliile pe care trebuie să le cunoașteți sunt în RFC 2045, RFC 2046, RFC 2047 și RFC 2048 (și actualizările corespunzătoare).

În final, există și întrebarea interesantă despre care este „partea principală” a unui e-mail. Să presupunem că aveți așa ceva: