Когда я отправляю электронное письмо, в нем не отображаются символы, кроме английского. Это показано ниже:
ä½ ™ ç ”ä» ä »
Может знать, в чем причина этого? Даже я попытался добавить Content-type и charset в скрипт, он все равно показывает то же самое.
я использовал Mail::Factory("mail");
mail()
илиZend_Mail
илиPHPMailer
? Нужен код фабричного метода!$mail = Mail::factory("mail");
$to = "me@abc.com";
$body = "好信";
$headers = array("Content-type =>"text/plain: charset=\"UTF-8","From" => "abc@abc.com","To" => "me@abc.com","Subject" => "Test Send Chinese mail-好信");
$mail->send($to, $headers, $body);
это правильно? Это не показывает того, чего я ожидал. Он должен отображать китайское слово в теле, заголовке или даже теме.Ответы:
Вы можете добавить заголовок Content-Type: text / html; charset = UTF-8 в тело сообщения.
$headers = "Content-Type: text/html; charset=UTF-8";
Если вы используете встроенную
mail()
функцию, массив $ headers будет 4-м параметромmail($to, $subject, $message, $headers)
Если вы используете PEAR Mail :: factory (), код будет:
$smtp = Mail::factory('smtp', $params); $mail = $smtp->send($to, $headers, $body);
источник
mail()
- это строка, а не массив !!charset=UTF-8
без кавычекUTF-8
!text/html
случае, если вы отправляете электронное письмо в формате HTML. Для обычных текстовых писем вы хотитеtext/plain
.Я использую довольно заданную кодировку (ISO-8859-2), потому что не каждая почтовая система (например, http://10minutemail.com ) может читать письма UTF-8. Если вам это нужно:
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()); }
Я сделал еще одну функцию почтовой программы, потому что яблочное устройство плохо читало предыдущую версию.
function utf8mail($to,$s,$body,$from_name="x",$from_a = "info@x.com", $reply="info@x.com") { $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); }
источник
$headers.= "From: =?utf-8?b?".base64_encode($from_name)."?= <".$from_a.">\r\n";
эта строка решила мою проблему, спасибо!'=?utf-8?Q?' . quoted_printable_encode($string) . '?='
Если нет
HTML
, тоUTF-8
не рекомендуется.koi8-r
иwindows-1251
только без проблем. Так что используйте почту 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); }
источник