Problémy s diakritikou při odesílání e-mailu

Při vývoji jednoho projektu jsem narazil na problém s diakritikou e-mailů odesílaných funkcí mail. Přestože měla zpráva nastaveno správné kódování obsahu i MIME type, diakritika v předmětu byla nečitelná.

Nakonec jsem přišel na to, že kódování obsahu se týká jen těla zprávy. Kódování předmětu se musí definovat zvlášť.

Stačí k tomu tato formulka:

"=?utf-8?B?".base64_encode($subject)."?="

Celý skript pro odesílání mailů pak vypadá nějak takto:


$headers  = "MIME-Version: 1.0n";
$headers .= "Content-type: text/html; charset=utf-8n";
$headers .= "Content-Transfer-Encoding: base64n";
$headers .= "From: "Mojeprani" n";
$text = base64_encode($text);

$subject = "=?utf-8?B?".base64_encode($subject)."?=";

mail($to,$subject,$text,$headers);

Takto odeslaný mail má již diakritiku v pořádku.

Hodnocení

Komentáře

2007-11-14 00:53:59

Ne vsechny (tj. stare) servery / clienti podporuji standard MIME, protoze puvodni navrh emailovych sluzeb pocital jen se 7b na znak (coz vylucuje narodni diakritiku) -> proto je lepsi posilat emaily v bezdiakriticke forme.

Jinak kodovani base64 je vhodne pro prenost binarnich dat (totiz pro zvyseni spolehlivosti bezchybneho doruceni se zvysuje redundance dat). Text je vhodnejsi posilat s kodovanim quoted-printable, ktery teda take zvysuje redundanci, ale ne tak rychle a navic znaky z horni poloviny ASCII tabulky nahrazuje jejich hodnotou, napr. "ř" -> "=F8", kdezto base64 by z "Dobry den, jak se mate?" udela neco jako "0M84GxGEAAAAAAAAAAAAAAAPg//CQAAAA" a tomu porozumi uz jen malo kdo :D (pro duvod tohoto argumentu viz prvni odstavec)

[2] zimmi
2008-07-08 14:44:34

Zdravím,
mmntálně také řeším problém s odesláním mailu v kódování utf-8. Zatím jediným spolehlivým mailem se ukázal být GMail, který text bez problému zpracuje. Na české freemaily však chodí diakritika rozháraná, ačkoliv jsou všechny hlavičky nastavené na utf-8.

Nemáte pro mě nějakou radu? Vyzkoušel jsem už leccos, ale zatím jsem maily nerozchodil.

Na tento komentář odpověděl [3] sNop
[3] sNop
2008-07-09 14:09:21

#2 zimmi: posilej maile v kodovani iso-8859-2, utf8 neni zakazane ale neni zahrnuty v rfc a kazdy klient mu nemusi porozumet i kdyz nejnovesi klienti a servere to bezproblemu prelouskaji. Kdyz skriptis v PHP tak pouzij class PHPMailer, ktery vsetko vyresi za tebe a nemusis nic psat, jen par radku

Komentáře již nelze přidávat