2011-09-01 3 views
58

Po wysłaniu wiadomości e-mail e-mail nie zawiera znaków innych niż angielski. To ma pokazać jak poniżej:Jak wysłać wiadomość e-mail w formacie UTF-8?

½ ™ ç”ya» A »

może wiedzieć, co rzeczywiście przyczyną tego? Nawet próbowałem dodać Content-type i charset w skrypcie, to wciąż pokazują to samo.

użyłem Mail::Factory("mail");

+2

Czego używasz? natywne 'mail()' lub 'Zend_Mail' lub' PHPMailer'? Potrzebujesz kodu metody Factory! –

+2

Musisz dodatkowo zadbać o docelowych klientów poczty e-mail. Nawet jeśli sprawisz, że poprawnie wyświetlisz wiadomość e-mail w kliencie poczty e-mail, nie oznacza to, że klient będzie widział poprawną pocztę. Na koniec zawsze buduję html-e-maile z nagłówkiem zestawu znaków UTF-8. W ten sposób większość klientów poczty e-mail wyświetla treść poprawnie. – Marco

+0

@FlyBy: tak, dokładnie to, co chcę zrobić, wyświetl zawartość z zestawem znaków UTF-8, ale nadal nie widzę poprawnie wiadomości e-mail. – deepWebMie

Odpowiedz

83

Możesz dodać nagłówka "Content-Type: text/html; charset = UTF-8" do treści wiadomości.

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

Jeśli używasz natywną mail() funkcji tablicę $ nagłówki będą 4. parametr mail($to, $subject, $message, $headers)

Jeśli user Gruszka poczta :: factory() kod będzie:

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

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

tutaj jest mój kod $ mail = Mail :: factory ("mail"); $ to = "[email protected]"; $ body = "好 信"; $ headers = array ("Content-type =>" text/plain: charset = \ "UTF-8", "Od" => "[email protected]", "To" => "[email protected] "," Temat "=>" Test Wyślij chińską pocztę - 好 信 "); $ mail-> send ($ to, $ headers, $ body) Czy to prawda? Nie pokazuje tego, czego się spodziewam. Powinien wyświetlać chińskie słowo w treści, nagłówku, a nawet temacie. – deepWebMie

+0

UTF-8 wymaga 8 bitów. Większość narzędzi e-mail nadal używa: Content-Transfer-Encoding: 7bit. Wyniki będą zależały od narzędzi, przez które przechodzi twoja treść, ale spróbuj dodać wpis do tablicy nagłówków Content-Transfer-Encoding: 8bit – ClearCrescendo

+1

Które narzędzia poczty e-mail używają 7-bitowego kodowania transferu? – Grodriguez

25

I m używając raczej określonego zestawu znaków (ISO-8859-2), ponieważ nie każdy system pocztowy (na przykład: http://10minutemail.com) może odczytywać wiadomości UTF-8. Jeśli potrzebujesz tego:

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()); 
    } 

Zrobiłem inną funkcję mailera, ponieważ urządzenie Apple nie mogło odczytać poprzedniej wersji.

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

To działa! Dzięki. – MilanG

+2

A jeśli próbujesz wysyłać treści, które nie mogą być reprezentowane w ISO-8859-2 ?! – deceze

+4

'$ headers. =" From: =? Utf-8? B? ". Base64_encode ($ from_name)."? = <".$from_a."> \ r \ n ";' ta linia rozwiązała mój problem, dziękuję! – Julia