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); }
PHP ile UTF-8 mail göndermek 10 yorum aldı.
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”;
@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. 🙂
Aynı sorundan bende muzdarip idim. Örneğini deniyorum. Umarım başarılı olur.
Çok teşekkür ederim.
Deneme fırsatı buldum, gayet başarılı. Tebrik ederiz.
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.
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..
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!' );
?>
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.
çok teşekkürler.OK. internet de çözümü zor bulunan bir konuya değinmişsiniz 🙂
Uzun zamandır çözemediğim bir sıkıntıydı.
Bu faydalı bilgi için teşekkürler.
‘de, da’ eki nasıl yazılır?
Almanya’da nasıl ehliyet aldım?
Almanya’dan kalıcı oturuma izni (niederlassungserlaubnis) nasıl alınır?
Harici monitör parlaklığı klavye ile nasıl değiştirilir?
Almanya’da nasıl ehliyet aldım?
Bir şirket neden uzaktan çalışmaya (remote working) izin verir?
-de -da eki ne zaman ayrı yazılır?
Almanya’ya gelmek için yapılan bürokratik işlemler