Как отправить письмо в формате UTF-8?
Когда я отправляю электронное письмо, оно не содержит символов, кроме английского. Это показывает, как показано ниже:
ä½ ™ ç"Ya" ä "
Может знать на самом деле, что является причиной этого? Даже я пытался добавить Content-type и charset в скрипт, он по-прежнему показывает то же самое.
я использовал Mail::Factory("mail");
2 ответа
Вы можете добавить заголовок "Content-Type: text/html; charset=UTF-8" к вашему телу сообщения.
$headers = "Content-Type: text/html; charset=UTF-8";
Если вы используете родной mail()
Функция $headers array будет 4-м параметром mail($to, $subject, $message, $headers)
Если вы используете PEAR Mail::factory(), то код будет:
$smtp = Mail::factory('smtp', $params);
$mail = $smtp->send($to, $headers, $body);
Я использую довольно определенную кодировку (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());
}
Я сделал еще одну функцию почтовой программы, потому что устройство Apple не могло хорошо прочитать предыдущую версию.
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);
}
Если не 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);
}