Как отправить UTF-8 по электронной почте? - PullRequest
72 голосов
/ 01 сентября 2011

Когда я отправляю письмо, оно не содержит символов, кроме английского.Это выглядит так, как показано ниже:

ä½ ™ ç ”»ä» ä »

Может знать на самом деле, что это вызывает?Даже если я попытался добавить Content-type и charset в скрипт, он все равно показывает то же самое.

Я использовал Mail::Factory("mail");

Ответы [ 2 ]

101 голосов
/ 01 сентября 2011

Вы можете добавить заголовок «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);
31 голосов
/ 01 сентября 2011

Я использую определенную кодировку (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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...