Tengo una base de datos donde guardo los correos y nombres de mis suscriptores.
Completo un formulario, recupero los datos de la base de datos y envío los emails.
Tengo tres emails de prueba (GMail, Windows Live Hotmail y Yahoo!).
A GMail el mensaje llega perfectamente sin problemas.
Primer problema: Yahoo! recibe los caracteres acentuados y me los convierte en Ã* á ó...
Probé con htmlentities() pero no sirvió y empeoró porque GMail empezó a mostrar esos caracteres. Ahora no uso htmlentities() y sigo donde estaba desde el principio.
¿Cuál puede ser el problema y la solución?
Segundo problema: el correo llega vacío, nulo, en blanco a Windows Live Hotmail.
¿Cuál puede ser el problema y la solución?
El código que uso es el siguiente:
Código PHP:
include("class.phpmailer.php");
include("modelo.php"); //Modelo contiene el mensaje en HTML y el mensaje alternativo en texto plano con las variable correspondientes donde debe ser.
// El texto en HTML se llama $cuerpo y el texto alternativo $cuerpo2
$mail = new PHPMailer();
// Recupero la información del formulario
$titulo = $_POST['titulo'];
$texto = $_POST['texto'];
$url1 = $_POST['url1'];
$url2 = $_POST['url2'];
$url2 = $_POST['url3'];
$id1 = $_POST['id1'];
$id2 = $_POST['id2'];
$id3 = $_POST['id3'];
$nombre1 = $_POST['nombre1'];
$nombre2 = $_POST['nombre2'];
$nombre3 = $_POST['nombre3'];
// Configuro los parámetros de PHPMailer
$mail->Host = "localhost";
$mail->From = "mail@mail.com";
$mail->FromName = "Mail";
$mail->Subject = $titulo;
$mail->Body = $cuerpo;
$mail->AltBody = $cuerpo2;
// Obtengo los datos de la base de datos y envío tantos emails como suscriptores tenga
$contactos = mysql_query("SELECT * FROM suscriptores", $sql_c) or die (mysql_error());
while ($mails=mysql_fetch_array($contactos)) {
$mail->ClearAddresses();
$mail->AddAddress($mails['mail'],$mails['nombre']);
$mail->Send();
$c++;
}
// Guardo en el archivo mensaje.html el correo que envío más un extra de código HTML
// Este archivo es la página a la que debería ir la gente si no ve correctamente el mensaje
$fd = fopen('../mensaje.html', 'w+');
$html ="<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\">
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />
<title>Mensaje Semanal</title>
</head>
<body>
".$cuerpo."
</body>
</html>";
fwrite ($fd,$html);
fclose ($fd);
Saludos.