Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/10/2008, 12:03
Avatar de Escoffie
Escoffie
 
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 242
Antigüedad: 21 años
Puntos: 9
Método definitivo para mandar correos con PHPMailer que sí lleguen a Hotmail

Hola a todos:

Comparto con ustedes el fruto de un par de días de investigación colaborativa entre varias personas y que finalmente logramos hacer que PHPMailer sí envíe correos a Hotmail y a otros destinatarios "pesados". Yo no soy el descubridor, sólo el recapitulador.

El método:
  • Se utilizó una cuenta SMTP.
  • La cuenta se configuró en Outlook y en PHPMailer.
  • Los correos mandados desde Outlook llegaban a Hotmail, pero los de PHPMailer, no.
  • Se compararon los Headers de ambos correos.
  • se compararon los Headers del correo que no llegó a Hotmail, con otros de otras fuentes que sí llegaron.
  • Se determinó que el Header clave es "Received:", que en ocasiones, sobre todo detrás de un Firewall, se identifica como "nobody".
  • Se determinó que usando el parámetro Helo de la clase PHPMailer, se le puede indicar a ésta el valor correcto para este Header.
  • Se implementó el cambio y hasta el momento funciona perfectamente en Hotmail, Gmail, Yahoo, y otros dominios con los que teníamos problemas.
El código:
Código PHP:
//Incluimos la función
require_once('../phpmailer/class.phpmailer.php');
//Creamos la instancia de la clase PHPMailer y configuramos la cuenta
$mail=new PHPMailer();
$mail->Mailer="smtp";
$mail->Helo "www.eldominioqueusas.com.mx"//Muy importante para que llegue a hotmail y otros
$mail->SMTPAuth=true;
$mail->Host="eldominioqueusas.com.mx";
$mail->Port=26//depende de lo que te indique tu ISP. El default es 25, pero nuestro ISP lo tiene puesto al 26
$mail->Username="[email protected]";
$mail->Password="******";
$mail->From="[email protected]";
$mail->FromName="El Nombre del Remitente";
$mail->Timeout=60;
$mail->IsHTML(true);
//Enviamos el correo
$mail->AddAddress('[email protected]'); //Puede ser Hotmail
$mail->Subject='Tu asunto';
$mail->Body="<p>Texto lo suficientemente largo y con pocos links para que no sea interpretado como SPAM</p><p>Es importante que el texto sea lo suficientemente largo, ya que si sólo tienes por ejemplo, una frase y un link, asume tanto Outlook como la mayoría de los destinatarios, que se trata de SPAM</p><p>Pero si tu texto es largo y tienes un link a <a href\"http://www.forosdelweb.com\">Foros del web</a> por ejemplo, funcionará perfectamente bien.</p>";
$mail->AltBody="Texto que debe decir lo mismo que el Body, pero sin etiquetas HTML";
$exito $mail->Send();
if(
$exito){
     
$mail->ClearAddresses();
     echo 
"Mensaje enviado exitosamente";

Espero que este Post le facilite la vida a muchos de ustedes.
Gracias a todos los que colaboraron para determinar el origen y solución dle problema.
Recemos porque Live no cambie sus políticas (otra vez) de recepción de correos.

Cualquier duda, falla o comentario, con toda confianza, que la idea es mejorarlo.

Hasta la próxima.

Última edición por Escoffie; 03/10/2008 a las 12:05 Razón: Corrección de error de dedo