Autor Zpráva
aDAm
Profil
Zdravím.
Mám trošku problém s kódování přijatých emailů které zpracovávám pomocí PHP funkcí IMAP.

Klasicky se připojím na pop3 mailový server, načtu zprávy a pak je po jedné zpracovávám.

1. Pomocí funkce imap_header si načtu hlavičku mailu a zjistím z ní předmět, datum
2. S pomocí funkce imap_mime_header_decode ze subjectu zjistím kódování zprávy
3. Pak si funkcí imap_fetchstructure načtu celou strukturu emailu a dále s ním pracuju podle toho jestli má nějaké parts nebo ne a pomocí funkce imap_fetchbody vytahuju jednotlivé texty. Buď vytáhnu PLAIN text a když není k dispozici tak HTML
4. Podle toho jaké má encoding daná část mailu se ještě provede dekodování. Když je encoding rovno 3 tak se použije imap_base64 a když je encoding rovno 4 tak zase quoted_printable_decode

Po tomto kroku mám načtené tedy hlavní části mailu co mě zajímají ovšem někdy je text s českými znaky nečitelný. Do systému jej potřebuju dostávat v UTF-8 tak ještě tedy ty body části převedu pomocí ICONV z encoding co jsem zjistil v bodě 2 na UTF8.

U některých mailů to projde ok a čeština se korektně hodí do UTF8 ale u některých se to rozhodí. Zkoušel jsem tam ještě přidat funkci mb_detect_encoding která mi detekovala zda je to UTF8 nebo ne a podle toho se to ICONVem přeformátovalo. Ovšem třeba u mailů co byly odeslány přes gmail to zase nasekalo chyby.

Může mi nekdo poradit kde dělám chybu? Nebo jak se dopracovat k tomu aby jakýkoliv mail byl správně převeden do UTF8?
Keeehi
Profil
A funkce autoutf() by to korektně nezvládla?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: