2011-09-01 16 views
58

E-postayı gönderdiğimde, e-posta ingilizce dışındaki karakterleri göstermiyor. Aşağıda gibi gösterir:UTF-8 e-posta nasıl gönderilir?

Ľ ™ ç”Ya» ä »

bu sebep aslında ne öğrenebilir miyim? Komut dosyasına İçerik türü ve karakter takımı eklemeyi denedim, yine de aynı şeyi gösteriyor.

Ben Sen başlık ekleyebilir

+2

Ne kullanıyorsunuz? native 'mail() 'veya' Zend_Mail' veya 'PHPMailer'? Fabrika yönteminin bazı kodlarına ihtiyacınız var! –

+2

Ayrıca, hedef e-posta istemcilerine de dikkat etmelisiniz. E-posta istemcinizde e-postayı doğru bir şekilde görüntülemeyi başarsa bile, müşterinizin postayı doğru göreceği anlamına gelmez. Sonunda, her zaman utf-8 karakter takımı üstbilgisi ile html-e-postaları yapıyorum. Bu şekilde çoğu e-posta istemcisi içeriği doğru görüntüler. – Marco

+0

@FlyBy: Evet, tam olarak ne yapmak istediğimi, içeriği utf-8 karakter kümesiyle görüntülüyorsun, ancak yine de e-postayı doğru şekilde göremiyorum. – deepWebMie

cevap

83

Mail::Factory("mail"); kullanılan "Content-Type: text/html; charset = UTF-8" mesajınız vücuda.

$headers = "Content-Type: text/html; charset=UTF-8"; 

Eğer 4 parametreyi olacak yerli mail() fonksiyon $ başlıklar dizi kullanırsanız mail($to, $subject, $message, $headers)

Kullanıcı ARMUT Mail'in :: fabrika() kodu olacaksa:

$smtp = Mail::factory('smtp', $params); 

$mail = $smtp->send($to, $headers, $body); 
+0

benim kodum $ mail = Mail :: fabrika ("mail"); $ to = "[email protected]"; $ body = "好 信"; $ headers = array ("İçerik türü =>" text/plain: charset = \ "UTF-8", "From" => "[email protected]", "To" => "[email protected] "," Konu "=>" Çince Posta Gönderme Testi "-; $ posta-> gönder ($ to, $ üstbilgiler, beden) Bu doğru mu? Beklediğimi göstermiyor. Vücutta, başlıkta veya hatta konudaki Çince kelimeyi göstermelidir. – deepWebMie

+0

UTF-8, 8 bit gerektirir. Çoğu e-posta aracı hala kullanıyor: İçerik Aktarımı Kodlaması: 7bit. Sonuçlar içeriğinizin geçtiği araçlara bağlı olacaktır, ancak Content-Transfer-Encoding başlıklarına bir giriş eklemeyi deneyin: 8bit – ClearCrescendo

+1

Hangi e-posta araçları 7 bitlik transfer kodlamasını kullanır? – Grodriguez

25

Ben Her posta sistemi (örneğin: http://10minutemail.com) UTF-8 postalarını okuyamayacağından, oldukça belirtilmiş karakter kümesi (ISO-8859-2) kullanarak m. elma cihazı iyi önceki sürümünü okuyamadı, çünkü başka mailler işlevini yapmış

function utf8_to_latin2($str) 
{ 
    return iconv ('utf-8', 'ISO-8859-2' , $str); 
} 
function my_mail($to,$s,$text,$form, $reply) 
    { 
     mail($to,utf8_to_latin2($s),utf8_to_latin2($text), 
     "From: $form\r\n". 
     "Reply-To: $reply\r\n". 
     "X-Mailer: PHP/" . phpversion()); 
    } 

: Bu gerekiyorsa.

function utf8mail($to,$s,$body,$from_name="x",$from_a = "[email protected]", $reply="[email protected]") 
{ 
    $s= "=?utf-8?b?".base64_encode($s)."?="; 
    $headers = "MIME-Version: 1.0\r\n"; 
    $headers.= "From: =?utf-8?b?".base64_encode($from_name)."?= <".$from_a.">\r\n"; 
    $headers.= "Content-Type: text/plain;charset=utf-8\r\n"; 
    $headers.= "Reply-To: $reply\r\n"; 
    $headers.= "X-Mailer: PHP/" . phpversion(); 
    mail($to, $s, $body, $headers); 
} 
+0

Çalışıyor! Teşekkürler dostum. – MilanG

+2

Peki ya ISO-8859-2'de temsil edilemeyen içerik göndermeye çalışıyorsanız ?! – deceze

+4

'$ headers. =" Kimden: =? Utf-8? B? ". Base64_encode ($ from_name)."? = <".$from_a."> \ r \ n ";' bu satır sorunumu çözdü, teşekkürler! – Julia