
DeepWebMie
Cuando envío el correo electrónico, el correo electrónico no muestra otros caracteres que no sean inglés. Se muestra como a continuación:
余生ä»ä»
Puede saber realmente qué causa esto? Incluso traté de agregar el tipo de contenido y el conjunto de caracteres en el script, todavía muestra lo mismo.
solía Mail::Factory("mail");

s.webbandit
Puede agregar el encabezado “Content-Type: text/html; charset=UTF-8” al cuerpo de su mensaje.
$headers = "Content-Type: text/html; charset=UTF-8";
Si usas nativo mail()
La función $headers array será el cuarto parámetro.
mail($to, $subject, $message, $headers)
Si usa PEAR Mail::factory(), el código será:
$smtp = Mail::factory('smtp', $params);
$mail = $smtp->send($to, $headers, $body);
Estoy usando un conjunto de caracteres bastante específico (ISO-8859-2) porque no todos los sistemas de correo (por ejemplo: http://10minutemail.com) puede leer correos UTF-8. Si necesitas esto:
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());
}
He creado otra función de correo, porque el dispositivo Apple no podía leer bien la versión anterior.
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);
}

vml vml
Que no HTML
luego UTF-8
no es recomendado. koi8-r
y windows-1251
solo que sin problemas. Así que usa el correo 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);
}
¿Que usas? nativo
mail()
oZend_Mail
oPHPMailer
? ¡Necesita algún código del método Factory!–Wesley van Opdorp
1 de septiembre de 2011 a las 6:59
Además, debe cuidar los clientes de correo electrónico de destino. Incluso si logra ver el correo electrónico correctamente en su cliente de correo electrónico, no significa que su cliente verá el correo correcto. Al final, siempre construyo correos electrónicos html con encabezado de juego de caracteres utf-8. De esta manera, la mayoría de los clientes de correo electrónico muestran el contenido correctamente.
– marco
1 de septiembre de 2011 a las 7:05
@FlyBy: sí, eso es exactamente lo que quiero hacer, mostrar el contenido con el juego de caracteres utf-8, pero aún no puedo ver el correo electrónico correctamente.
– deepWebMie
1 de septiembre de 2011 a las 7:32
Content-Type y charset son precisamente lo que necesita para que esto funcione, pero debe brindarnos más información. ¿Puedes mostrarnos el código? y/o la fuente del mensaje resultante? ¿Estás seguro de que tus datos están codificados correctamente en utf8?
– triplete
1 de septiembre de 2011 a las 7:44
aquí está mi código de ejemplo:
$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);
¿Es esto correcto? No muestra lo que espero. Debe mostrar la palabra china en el cuerpo, el encabezado o incluso el tema.– deepWebMie
1 de septiembre de 2011 a las 8:04