PHP Mail UTF-8 Sorunu ve Çözümü

Oluşturduğum bir sistem içerinde UTF-8 içerikleri olan bir formdan php mail fonksiyonunu kullanan bir mail gönderme fonksiyonu yazmıştım. Herşey doğru şekilde işliyor ve ulaşması gereken e-postalar yerine doğru şekilde ulaşıyordu. Ama tek bir sorun kalmıştı ortada. Ulaşan e-postalar Mozilla Thunderbird ve Roundcube (Webmail istemcisi) içerisinde doğru görüntülenebilirken Microsoft Outlook serisinde sıkıntı yaratıyordu. Türkçe karakterler hiç de iyi görüntülenmiyordu işin aslı.

Bunu düzeltirken iconv() fonksiyonunu kullandım. Sizlerle de paylaşmak istedim bu özelliği. php.net üzerindeki şu adresten de Türkçe bilgi ve örneklere ulaşabileceğiniz bu fonksiyon bir karakter kodlaması değiştiricisi olarak kullanılıyor. Yani UTF-8 kodlamayı ISO-8859-9 (Türkçe) kodlamasına çevirebiliyorsunuz.

Örnek olarak gönderim fonksiyonunun ilk hali aşağıda. UTF-8 e-posta gönderiyor kendileri. Ama Outlook hazretleri bunu doğru gönrüntüleyemiyordu.

	$eposta  = $e3['eposta'];
	$epostag = $e4['eposta'];
    $header	 = 'MIME-Version: 1.0' . "rn";
    $header .= 'Content-type: text/html; charset=UTF-8' . "rn";
    $header .= 'Content-Language: tr' . "rn";
    $header .= 'From: '.$talep_eden.' <'.$epostag.'>'. "rn";
    $konu    = "Site Sistemine Yeni Durum Eklenmesi";
    $body    = "Site Sistemine $talep_eden tarafından Yeni Durum Eklenmiştir. Kısa Bilgiler Aşağıdadır;<br />
        Firma : $firma
    <br />
        Mağaza: $magaza
    <br />
        Açıklama: $aciklama
    <br />
	Daha Detaylı bilgi için lütfen <a href='http://sitelinki' target='_blank'>site adresi</a> alanına giriş yapınız.";
    $sent = mail($eposta, $konu, $body, $header);

Sonra iconv() kullandık. Aşağıdaki yeni kodumuz böyle oldu.

	$eposta  = $e3['eposta'];
	$epostag = $e4['eposta'];
    $header	 = 'MIME-Version: 1.0' . "rn";
    $header .= 'Content-type: text/html; charset=ISO-8859-9' . "rn";
    $header .= 'Content-Language: tr' . "rn";
    $header .= 'From: '.$talep_eden.' <'.$epostag.'>'. "rn";
    $konu    = "Site Sistemine Yeni Durum Eklenmesi";
    $body    = "Site Sistemine $talep_eden tarafından Yeni Durum Eklenmiştir. Kısa Bilgiler Aşağıdadır;<br />
        Firma : $firma
    <br />
        Mağaza: $magaza
    <br />
        Açıklama: $aciklama
    <br />
	Daha Detaylı bilgi için lütfen <a href='http://sitelinki' target='_blank'>site adresi</a> alanına giriş yapınız.";
	$bodydecode = iconv("UTF-8", "ISO-8859-9", $body);
	$headerdecode = iconv("UTF-8", "ISO-8859-9", $header);
	$konudecode = iconv("UTF-8", "ISO-8859-9", $konu);
    $sent = mail($eposta, $konudecode, $bodydecode, $headerdecode);

Bu kodla birlikte tanımlanan değerlerimizi UTF-8 kodlamasından ISO-8859-9 kodlamasına almasını sonra da göndermesini sağlamış olduk. Tabii gönderilen e-postamızın kodlamasını da ISO-8859-9 a aldık.

İstediğimiz değerin kodlamasını değiştirmek için tek başına fonksiyonumuz da aşağıdaki gibidir.

$deger = "UTF-8 İçeriğimiz"
$decoded = iconv("UTF-8", "ISO-8859-9", $deger);

echo $decoded;

Daha detaylı bilgi için;
Fonksiyon Bilgisi

utf-8

Selametle

4 thoughts on “PHP Mail UTF-8 Sorunu ve Çözümü”

  1. Eyvallah hacı. Aynı sorun bende de vardı. Sayende çözüldü. Paylaşım için teşekkürler. Başarılar.

  2. Oktay bey,

    Kullandığınız eklenti UTF-8 çıktı ile gönderiyordur. ilgili eklentinin alanına yukarıda anlattığım sistemi uygulayabilirseniz sorununuz düzelecektir.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir