Kiedy wysyłam e-mail, e-mail nie zawiera znaków innych niż angielski. Pokazuje jak poniżej:
ä½ ™ ç ”Ÿä» ä »
Może właściwie wiedzieć, co to powoduje? Nawet ja próbowałem dodać w skrypcie typ zawartości i kodowanie, ale nadal pokazuje to samo.
użyłem Mail::Factory("mail");
mail()
czyZend_Mail
lubPHPMailer
? Potrzebujesz kodu metody Factory!$mail = Mail::factory("mail");
$to = "[email protected]";
$body = "好信";
$headers = array("Content-type =>"text/plain: charset=\"UTF-8","From" => "[email protected]","To" => "[email protected]","Subject" => "Test Send Chinese mail-好信");
$mail->send($to, $headers, $body);
Czy to jest poprawne? Nie pokazuje, czego się spodziewam. Powinien wyświetlać chińskie słowo w treści, nagłówku lub nawet temacie.Odpowiedzi:
Możesz dodać nagłówek „Content-Type: text / html; charset = UTF-8” do treści wiadomości.
$headers = "Content-Type: text/html; charset=UTF-8";
Jeśli używasz natywnej
mail()
funkcji $ headers, tablica będzie czwartym parametremmail($to, $subject, $message, $headers)
Jeśli korzystasz z PEAR Mail :: factory () kod będzie:
$smtp = Mail::factory('smtp', $params); $mail = $smtp->send($to, $headers, $body);
źródło
mail()
to ciąg znaków, a nie tablica !!charset=UTF-8
bez cytatówUTF-8
!text/html
wtedy, gdy wysyłasz wiadomość e-mail w formacie HTML. Dla zwykłych e-maili tekstowych chcesztext/plain
.Używam raczej określonego zestawu znaków (ISO-8859-2), ponieważ nie każdy system pocztowy (na przykład: http://10minutemail.com ) może czytać wiadomości e-mail 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 kolejną funkcję mailera, ponieważ urządzenie Apple nie mogło dobrze 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); }
źródło
$headers.= "From: =?utf-8?b?".base64_encode($from_name)."?= <".$from_a.">\r\n";
ta linia rozwiązała mój problem, dzięki!'=?utf-8?Q?' . quoted_printable_encode($string) . '?='
Jeśli nie
HTML
,UTF-8
to nie jest zalecane.koi8-r
iwindows-1251
tylko bez problemów. Więc używaj poczty html.$headers['Content-Type']='text/html; charset=UTF-8'; $body='<html><head><meta charset="UTF-8"><title>ESP Notufy - ESP Сообщения</title></head><body>'.$text.'</body></html>'; $mail_object=& Mail::factory('smtp', array ('host' => $host, 'auth' => true, 'username' => $username, 'password' => $password)); $mail_object->send($recipents, $headers, $body); }
źródło