2012-10-11 34 views
6

Estoy usando phpmailer para enviar correos electrónicos en mi sitio web. Mi código funciona bien, pero a veces en el cuerpo del mensaje de correo electrónico contiene un signo de exclamación en lugares aleatorios. Mi código es el siguiente:signo de admiración aparece en el cuerpo del mensaje de correo electrónico usando phpmailer

$mail->SetFrom(FROM_EMAIL,FROM_NAME); //emailid of sender(admin)     
$mail->Subject = 'Subject here.'; //subject of email 
$mail->AddAddress(Address here); //emailid of user(recipient) 
$content = 'some html code here'; 

$mail->MsgHTML($content); //this is body of email 
$mail->Send(); 

Esto funciona bien. Pero no puedo encontrar por qué la exclamación aparece a veces. Gracias de antemano ...

+0

Signo de exclamación '!' O signo de interrogación '?' ?? A menudo, si el cliente que mira el correo HTML malinterpreta el conjunto de caracteres (porque su mensaje no lo informó), los caracteres no válidos aparecerán como '?'. –

+0

Puede necesitar '$ mail-> CharSet = 'UTF-8';' –

Respuesta

8

Creo que es porque los mensajes de correo electrónico no pueden tener más de 998 caracteres en una línea.

Trate de añadir,

$mail->WordWrap = 50; 
+0

no sigue recibiendo el mismo error – CodeWarrior

+1

mira esto, http://www.tinyfrogsoftware.com/the-story-of-the-rogue-exclamation- mark-or-how-i-lost-4-hours-of-my-life/ Espero que ayude. –

+3

o intente agregar '$ content = wordwrap ($ contenido, 50);' después de '$ content = 'código html aquí';' –

3

Sé que es tarde, pero no hay una solución alternativa que funcionó para mí:

utilizar esta línea para codificar el mensaje completo base 64:

$message = chunk_split(base64_encode($message)); 

A continuación, agregue este su encabezado:

$headers .= "Content-Transfer-Encoding: base64\r\n\r\n"; 

Eso le dirá al cliente de correo que su mensaje está codificado en base64.

0

tuve este problema también, después de buscar mucho tiempo he descubierto que usted debe wordWrap su HTML

$emailContent = '<p>some large html</p>'; 
$mail->msgHTML(wordwrap($emailContent, 50)); 
1

si está utilizando PHPMailer entonces sólo una línea de código debería ayudar:

$mail = new PHPMailer(); 
$mail->Encoding = 'base64'; 

esto hará Content-Transfer-Encoding: base64 y chunk_split (base64_encode ($ message)) internamente.

Cuestiones relacionadas