PHP Logo
💻 Bilgisayar, 💾 Programlama

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

👋 🚨 Yeni yazılardan haberdar olmak ister misiniz? 👇
Etiketler

PHP ile UTF-8 mail göndermek 10 yorum aldı.

  1. Ayrıca bir fonksiyona gerek yok aslında. Sadece headers kısmına 2 özellik eklemen yeterli. Ben uzun süredir bu yöntemi kullanıyorum ve base64 kodlamasını kullanmıyorum.

    $headers .= “MIME-Version: 1.0” . “rn”;
    $headers .= “Content-type: text/html; charset=ISO-8859-9” . “rn”;

    şu kodlarıda eklersen alıcı sunucular tarafından daha güvenilir bir eposta göndermiş olursun. Birde mail fonksiyonunu kullanırken @mail olarak kullanmanı tavsiye ederim.

    $header .= “X-Mailer: PHP/” . phpversion() . “n”;
    $header .= “X-Priority: 1”;

    1. @Efecan: Dikkat ettiysen ben UTF-8 kodlaması ile mail göndermekten bahsediyorum. Senin gönderdiğin headerler ISO-8859-9 kodlamasına ait. ISO-8859’da bir sorun mevcut değil. 🙂

  2. Aynı sorundan bende muzdarip idim. Örneğini deniyorum. Umarım başarılı olur.

    Çok teşekkür ederim.

  3. Uzun zamandır çözemediğim bir sıkıntıydı. Kodlarınız gayet güzel çalışıyor. Bu faydalı bilgi için teşekkürler.

  4. Bozuk çıktı veriyor. Aynen kodu kullandım. Başlık ve adres kısmı düzgün olsa da bu sefer de body kısmı bozuldu..

  5. Merhaba,
    benzer bir problem yaşıyorum. Fakat php bilgim olmadığı için çözemedim. Yukarıdaki fonksiyonu nasıl kullanacağımı anlamadım.
    form sayfamdaki aşağıdaki gibi bir kodu, nasıl yukarıda anlattığınız gibi adapte edebilirim.
    Yardımlarınız için şimdiden teşekkürler.

    <?php
    reset ($_POST);
    while (list ($key, $val) = each ($_POST)) {
    $header= "Content-Type: text/html; charset=UTF-8" ;
    $veri.= "$key : $val\n";
    }

    mail("xxxxx@gmail.com", "Dilek ve istek formu", $veri,"From: xxxxxx@gmail.com\r\n");
    echo ('Teşekkürler!.. Formunuz Başarı ile İletilmiştir!' );

    ?>

    1. Fonksiyonu olduğu gibi kendi kodunuza yapıştırın. Daha sonra

      mail("xxxxx@gmail.com", "Dilek ve istek formu", $veri,"From: xxxxxx@gmail.com\r\n");

      satırı yerine,

      UTF8_mail($from, $to, $subject, $message);

      ile mesaj atın.

      $from yerine mail kimden gideceka
      $to yerine mail kime gidecek
      $subject yerine konu
      $message yerine mesajın içeriğini yazın.

      1. çok teşekkürler.OK. internet de çözümü zor bulunan bir konuya değinmişsiniz 🙂

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir