PHP ile UTF-8 mail göndermek

Kendisi bugün beni tüm gün boyunca uğraştıran konu olur!

Gönderdiğim mail biçimsiz (text/plain) ve herhangi bir dosya eki içermiyor. MIME tipleri doğru ayarlı ve headerda charset olarak Content-Type: text/plain; charset=UTF-8; göndermekteyim.

E-postam Gmail’de doğru görüntülenirken, Hotmail gönderdiğim postanın kodlamasını bir türlü algılayamıyor, bu yüzden Türkçe karakterler bozuk çıkıyor… Neden?

Uğraştım durdum… Tek bir sitede yanıt bulamadım… Uzunca bir süre araştırdıktan sonra keşfettim ki gönderdiğimiz mailin konusu (subject) ve içeriği (body) sadece UTF-8 karakteri içerse dahi base64 ile şifrelenmesi (encode in base64) gerekliymiş.

Budan dolayı şöyle bir fonksiyon kullandım. Sorun çözüldü.

 function UTF8_mail($from, $to, $subject, $message) { $from2 = explode("<",$from); if (isset($from2[0])) { $headers = "From: =?UTF-8?B?".base64_encode($from2[0])."?= <".$from2[1]."\r\n"; } else { $headers = "From: ".$from[1]."\r\n"; } $subject ="=?UTF-8?B?".base64_encode($subject)."?=\n";

$headers .= "Content-Type: text/plain; charset=UTF-8; format=flowed \n". "MIME-Version: 1.0 \n" . "Content-Transfer-Encoding: 8bit \n". "X-Mailer: PHP \n";

return mail($to, $subject, $message, $headers); }

Daha Fazla Bilgi İçin