2010-03-22 32 views
108

Intento usar PHPMailer para enviar el registro, la activación. etc electrónico a los usuarios:Problemas de codificación de caracteres de PHPMailer

require("class.phpmailer.php"); 
$mail -> charSet = "UTF-8"; 
$mail = new PHPMailer(); 
$mail->IsSMTP(); 
$mail->Host  = "smtp.mydomain.org"; 
$mail->From  = "[email protected]"; 
$mail->SMTPAuth = true; 
$mail->Username ="username"; 
$mail->Password="passw"; 
//$mail->FromName = $header; 
$mail->FromName = mb_convert_encoding($header, "UTF-8", "auto"); 
$mail->AddAddress($emladd); 
$mail->AddAddress("[email protected]"); 
$mail->AddBCC('[email protected]', 'firstadd'); 
$mail->Subject = $sub; 
$mail->Body = $message; 
$mail->WordWrap = 50; 
if(!$mail->Send()) { 
    echo 'Message was not sent.'; 
    echo 'Mailer error: ' . $mail->ErrorInfo; 
} 

El $message es contener caracteres latinos. Desafortunadamente, todos los correos web (gmail, webmail.mydomain.org, emailaddress.domain.xx) usan códigos diferentes.

¿Cómo puedo forzar el uso de la codificación UTF-8 para mostrar mi correo exactamente igual en todos los buzones?

Intento convertir el ancho del encabezado del correo mb_convert_encoding(), pero sin suerte.

+0

¿Has cambiado algo? –

+0

Las mayúsculas de CharSet anteriores fueron modificadas por bovender. – gogowitsch

Respuesta

299

Si no está 100% seguro de mensaje $ contienen ISO-8859-1 puede utilizar utf8_encode como dice David. De lo contrario, use mb_detect_encoding y mb_convert_encoding en $ mensaje.

Asimismo, tomamos nota de que

$mail -> charSet = "UTF-8"; 

debe sustituirse por:

$mail->CharSet = 'UTF-8'; 

Y colocaron después la creación de instancias de la clase (después de la "nueva"). Las propiedades son sensibles a mayúsculas y minúsculas Consulte PHPMailer doc para la lista & ortografía exacta.

+16

Bueno, yo no sé si a alguien le interesa, ya que es una locura de edad, pero, he tenido que añadir $ mail-> Encoding = "base64" a conseguir que esto funcione para mí –

+4

@AndrewRevak guardó el día! :) – carla

+2

@AndrewRevak ¡Cosas geniales! Eso es lo que lo resolvió. – BernardA

0

Si su mensaje usa Latin1, puede usar utf8_encode Funciona para mí, de todos modos.

-4

$ mail -> charSet = "UTF-8"; --- esta línea debe estar debajo de $ mail = new PHPMailer(); línea.

Pff ..

17
$mail -> CharSet = "UTF-8"; 
$mail = new PHPMailer(); 

línea de $mail -> CharSet = "UTF-8"; debe ser posterior $mail = new PHPMailer(); y sin espacios!

probar esto

$mail = new PHPMailer(); 
$mail->CharSet = "UTF-8"; 
+2

He actualizado esta publicación para una mejor lectura, ¡pero la pregunta de la operación ya fue respondida 2 años antes! Y esa respuesta aceptada ya incluía esta. – Dwza

0

@ $mail -> charSet = "UTF-8";

--- esta línea debe estar bajo

$mail = new PHPMailer(); line.

Pff ..


Sí, es correcto. Tienes que colocarlo después de la instanciación de objetos.

+0

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación; siempre puede comentar sus propias publicaciones, y una vez que tenga suficiente [reputación] (http://stackoverflow.com/help/whats-reputation) lo hará poder [comentar cualquier publicación] (http://stackoverflow.com/help/privileges/comment). –

+0

No es una crítica o una solicitud de aclaración para este problema. La respuesta correcta es: $ mail = new PHPMailer(); $ mail-> CharSet = 'UTF-8'; –

+0

Zo me parece un comentario sobre la respuesta de Holian ya que no le agrega nada. –

-1
$mail = new PHPMailer(); 
$mail -> CharSet = "UTF-8"; 
0

La forma más sencilla y le ayudará con CharSet se establece en UTF-8

$mail->CharSet = "UTF-8" 
+0

Él ya tiene una línea exacta en su código de muestra. –

+0

@NickZuber La línea exacta está allí debido a ediciones. No fue tan exacto en la pregunta original ... –

1

Lo siento por llegar tarde en el partido. Según la configuración de su servidor, es posible que se le solicite que especifique el carácter estrictamente con letras minúsculas utf-8; de lo contrario, se ignorará. Prueba esto si al final aquí en busca de soluciones y ninguna de las respuestas por encima de ayuda:

$mail->CharSet = "UTF-8"; 

debe sustituirse por:

$mail->CharSet = "utf-8"; 
2
$mail = new PHPMailer(); 
$mail->CharSet = "UTF-8"; 
$mail->Encoding = "16bit"; 
0

para evitar problemas de codificación de caracteres en el envío de mensajes de correo electrónico utilizando el clase PHPMailer podemos configurarlo para enviarlo con codificación de caracteres UTF-8 usando el parámetro "CharSet", como podemos ver en el siguiente código Php:

$mail = new PHPMailer(); 
$mail->From = '[email protected]'; 
$mail->FromName = 'Mi nombre'; 
$mail->AddAddress('[email protected]'); 
$mail->Subject = 'Prueba'; 
$mail->Body = ''; 
$mail->IsHTML(true); 


// Active condition utf-8 
$mail->CharSet = 'UTF-8'; 


// Send mail 
$mail->Send(); 
Cuestiones relacionadas