Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/10/2009, 20:14
MauXXI
 
Fecha de Ingreso: junio-2008
Mensajes: 51
Antigüedad: 15 años, 11 meses
Puntos: 2
Problemas con Yahoo!, htmlentities(), caracteres especiales y PHPMailer

Hola a todos.

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 "[email protected]";
$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); 
Ese es todo el código, espero que no sea muy dificil de entender.

Saludos.