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.
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";
}
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.