Foros del Web » Programando para Internet » PHP »

Problema con mail() y hotmail

Estas en el tema de Problema con mail() y hotmail en el foro de PHP en Foros del Web. Saludos, pues eso, tengo un scrip que envía un mail de recomendación de una cosa determinada dentro de la web. el problema es que me ...
  #1 (permalink)  
Antiguo 14/02/2005, 05:03
 
Fecha de Ingreso: agosto-2004
Ubicación: Valencia
Mensajes: 149
Antigüedad: 13 años, 4 meses
Puntos: 0
Problema con mail() y hotmail

Saludos,
pues eso, tengo un scrip que envía un mail de recomendación de una cosa determinada dentro de la web.
el problema es que me llega a todos los correos, outlook lo visiona perfectametne, gmail, ono, yahoo, etc, pero a hotmail no llega, no entra ni en la carpeta de spam, simplemente no entra el mail.
pego las cabeceras que envío para el correo,a ver si ahí estuviera el problema
Código PHP:
$destinatario "$emailfriend"
$responder="$email"
$remite="$email"
$remitente="www.loqueseas.com"
$cabecera ="Date: ".date("l j F Y, G:i")."\n"
$cabecera .="MIME-Version: 1.0\n";
$cabecera .="From: ".$remitente."<".$remite.">\n"
$cabecera .="Return-path: "$remite."\n"
$cabecera .="Reply-To: ".$responder."\n"
$cabecera .="X-Mailer: PHP/"phpversion()."\n";
$cabecera .="Content-Type: text/html; charset=\"ISO-8859-1\"\n"
mail($destinatario,$asunto,$cuerpo,$cabecera); 
Saludos y gracias anticipadas.
pd: estoy probando el minirelay y me pasa igual, no me llegan los mails a hotmail.
  #2 (permalink)  
Antiguo 14/02/2005, 09:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
pd: estoy probando el minirelay y me pasa igual, no me llegan los mails a hotmail.
¿Eso implica que estás usando tu conexión a internet y tu própio servidor SMTP instalado en tu PC?

Si es así, si tu e-mail "sale" de tu servidor SMTP o hay un problema por el caminio deberías revisar los "logs" de tu servidor SMTP que uses ahí veras si hay errores en la conexión a la cuenta de e-mail que pretendes enviar. En su defecto recuerda que los filtros de SPAM de muchos servicios de e-mail detectan por ejemplo cosas como que la IP que envia tu e-mail (tu conexión en tu caso al parecer) tenga registrado los "registros MX" como un e-mail "legitimo" si no es así es desechado (aunque al menos debería estar en tu carpeta de "correo masivo o spam")

Un saludo,
  #3 (permalink)  
Antiguo 14/02/2005, 16:46
 
Fecha de Ingreso: agosto-2004
Ubicación: Valencia
Mensajes: 149
Antigüedad: 13 años, 4 meses
Puntos: 0
Son dos cosas diferentes, he probado el scrip desde la web en línea utilizando el smtp del servidor y no me llegan los correos a hotmail, pero si a los demás.
Para ver si era cuestión del servidor probé hacerlo desde localhost con este programa y me pasa lo mismo.
No se cual es la solución, seguiré buscando.
Salu2.
  #4 (permalink)  
Antiguo 16/02/2005, 07:47
 
Fecha de Ingreso: agosto-2004
Ubicación: Valencia
Mensajes: 149
Antigüedad: 13 años, 4 meses
Puntos: 0
Pues sigo con el tema,
con un tipo de cabecera diferente consigo que lleguen los mails a outlook correctamente pero no llegan a hotmail y con otra llegan a hotmail y se ve el codigo html en outlook y otros correos.
Como podría saber la terminación del correo, es decir, el dominio que va detrás de la arroba, de esa forma podría hacer un if y diferenciar ambos envíos.
He estado probando con un código que tengo de comprobar mails que está en el faq pero no he sido capaz.
Salu2.
  #5 (permalink)  
Antiguo 16/02/2005, 09:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Deberías poner los códigos y cabeceras que mencionas definiendo bien claro donde dices que uno funciona y otro no (cliente de correo/cuenta mail)

Un saludo,
  #6 (permalink)  
Antiguo 16/02/2005, 11:08
 
Fecha de Ingreso: agosto-2004
Ubicación: Valencia
Mensajes: 149
Antigüedad: 13 años, 4 meses
Puntos: 0
Ok, aquí indico el código que llega correctamente a hotmail pero al outlook ve el codigo html y también a través de gmail, ono, etc, sólo se ve correctamente en hotmail:
Código PHP:
<HTML>
<HEAD>
<TITLE>Envio Email</TITLE>
<LINK REL="stylesheet" MEDIA="screen" TYPE="text/css" HREF="stils/stilo1.css">

</HEAD>
<?
function comprobar_email($email){ 
    
$mail_correcto 0
    
//compruebo unas cosas primeras 
    
if ((strlen($email) >= 6) && (substr_count($email,"@") == 1) && (substr($email,0,1) != "@") && (substr($email,strlen($email)-1,1) != "@")){ 
       if ((!
strstr($email,"'")) && (!strstr($email,"\"")) && (!strstr($email,"\\")) && (!strstr($email,"\$")) && (!strstr($email," "))) { 
          
//miro si tiene caracter . 
          
if (substr_count($email,".")>= 1){ 
             
//obtengo la terminacion del dominio 
             
$term_dom substr(strrchr ($email'.'),1); 
             
//compruebo que la terminación del dominio sea correcta 
             
if (strlen($term_dom)>&& strlen($term_dom)<&& (!strstr($term_dom,"@")) ){ 
                
//compruebo que lo de antes del dominio sea correcto 
                
$antes_dom substr($email,0,strlen($email) - strlen($term_dom) - 1); 
                
$caracter_ult substr($antes_dom,strlen($antes_dom)-1,1); 
                if (
$caracter_ult != "@" && $caracter_ult != "."){ 
                   
$mail_correcto 1
                } 
             } 
          } 
       } 
    } 
    if (
$mail_correcto
       return 
1
    else 
       return 
0

if (
comprobar_email($email))
{
$destinatario $emailfriend
$asunto "Tu [email protected] "$sender_name" te recomienda "$tipo
$cuerpo 
<html> 
<head> 
</body> 
</html>'
;
//para el envío en formato HTML 
$headers "MIME-Version: 1.0\r\n"
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n"
$headers .= "From: $email\r\n"
$headers .= "Reply-To: $email \r\n"
mail($destinatario,$asunto,$cuerpo,$headers
//aqui finalitza el mail amb format html
?> 
<BODY bgcolor="#000000">
<div align="center">
<br>
<font face='verdana' size='-1'color=#FFFFFF>Gracias por Recomendar </font>
</div>
<table border="0" align="center">
     <tr>
    <td width="100%" align="center" bgcolor="#FFFFFF"><div align="center">
        <a href="" onclick='window.close()'><font size="2" face="Arial, Helvetica, sans-serif" color="#666666"><strong>[ 
          Cerrar Ventana ]</strong></font></a>
      </div></td>
  </tr>
  
</table>
<?
}
else
{
     echo 
"Algunos de los datos no se han escrito correctamente<br>";
     echo 
"<a href=recomendar_juego.php>Volver a intentarlo</a><br>";
     echo 
"<br><a href=index.php>Volver</a>";
}
?>
</BODY>
</HTML>
Las variables llegan correctamente a este formulario.

Con este código los mails llegan perfectametne a outlook, a gmail y a todos, pero no llegan a hotmail, ni siquiera a la carpeta de spam, simplemente no llegan:

Código PHP:
<HTML>
<HEAD>
<TITLE>Envio Email</TITLE>
<LINK REL="stylesheet" MEDIA="screen" TYPE="text/css" HREF="stils/stilo1.css">

</HEAD>
<?
function comprobar_email($email){ 
    
$mail_correcto 0
    
//compruebo unas cosas primeras 
    
if ((strlen($email) >= 6) && (substr_count($email,"@") == 1) && (substr($email,0,1) != "@") && (substr($email,strlen($email)-1,1) != "@")){ 
       if ((!
strstr($email,"'")) && (!strstr($email,"\"")) && (!strstr($email,"\\")) && (!strstr($email,"\$")) && (!strstr($email," "))) { 
          
//miro si tiene caracter . 
          
if (substr_count($email,".")>= 1){ 
             
//obtengo la terminacion del dominio 
             
$term_dom substr(strrchr ($email'.'),1); 
             
//compruebo que la terminación del dominio sea correcta 
             
if (strlen($term_dom)>&& strlen($term_dom)<&& (!strstr($term_dom,"@")) ){ 
                
//compruebo que lo de antes del dominio sea correcto 
                
$antes_dom substr($email,0,strlen($email) - strlen($term_dom) - 1); 
                
$caracter_ult substr($antes_dom,strlen($antes_dom)-1,1); 
                if (
$caracter_ult != "@" && $caracter_ult != "."){ 
                   
$mail_correcto 1
                } 
             } 
          } 
       } 
    } 
    if (
$mail_correcto
       return 
1
    else 
       return 
0

if (
comprobar_email($email))
{
$destinatario $emailfriend
$asunto "Tu [email protected] "$sender_name" te recomienda "$tipo
$cuerpo 
<html> 
<head> 
</body> 
</html>'
;
//para el envío en formato HTML 
$destinatario "$emailfriend"
$responder="$email"
$remite="$email"
$remitente="www.miweb.com"
$cabecera ="Date: ".date("l j F Y, G:i")."\n"
$cabecera .="MIME-Version: 1.0\n";
$cabecera .="From: ".$remitente."<".$remite.">\n"
$cabecera .="Return-path: "$remite."\n"
$cabecera .="Reply-To: ".$responder."\n"
$cabecera .="X-Mailer: PHP/"phpversion()."\n";
$cabecera .="Content-Type: text/html; charset=\"ISO-8859-1\"\n"

mail($destinatario,$asunto,$cuerpo,$cabecera); 
?> 
<BODY bgcolor="#000000">
<div align="center">
<br>
<font face='verdana' size='-1'color=#FFFFFF>Gracias por Recomendar </font>
</div>
<table border="0" align="center">
     <tr>
    <td width="100%" align="center" bgcolor="#FFFFFF"><div align="center">
        <a href="" onclick='window.close()'><font size="2" face="Arial, Helvetica, sans-serif" color="#666666"><strong>[ 
          Cerrar Ventana ]</strong></font></a>
      </div></td>
  </tr>
  
</table>
<?
}
else
{
     echo 
"Algunos de los datos no se han escrito correctamente<br>";
     echo 
"<a href=recomendar_juego.php>Volver a intentarlo</a><br>";
     echo 
"<br><a href=index.php>Volver</a>";
}
?>
</BODY>
</HTML>
No se exactamente por que está pasando esteo, a ver sime podeis tirar un cable, pero al cuello no....
  #7 (permalink)  
Antiguo 16/02/2005, 11:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno .. parece el juego de "encuentra las diferencias" .. En un código usas como separador de cabeceras HTTP el \r\n y en otro el \n .. Esos "separadores" indican un salto de línea "y retorno de carro" .. Según sistemas operativos .. el \n se suele usar en linux/unix .. el \r\n sólo en windows .. etc: prueba cambiando dicho salto de línea y usando el mayor numero de cabeceras HTTP que usas en esos códigos .. Por lo demas, "el orden de los factores" aquí puede influir (poner una cabecera antes que otra .. ojo con eso. ..)

Si ese "salto de línea" no es correctamente interpretado .. las cabeceras tampóco, así que tu cabecera que dice "esto es en HTML" no será informada a tu cliente de correo y en consecuencia no se interpretará el HTML de ese e-mail (por poner algunos fallos que se podrían ocasionar especulando).

PD: esa tremenda función "comprobar_mail()" la puedes mejorar usando expresiones regulares (más optimo y cubriendo más detalles de la sintax de un e-mail):
http://www.forosdelweb.com/f18/faqs-php-530600-post333423/

Un saludo,

Última edición por Cluster; 16/02/2005 a las 11:39
  #8 (permalink)  
Antiguo 06/01/2006, 14:10
 
Fecha de Ingreso: septiembre-2003
Ubicación: Chile
Mensajes: 30
Antigüedad: 14 años, 3 meses
Puntos: 0
De acuerdo solucion

Código PHP:
           mail("$correo",
                
"$topic",
                
"$body_cuerpo",
                
"From: $txtquien \nMime-Version: 1.0\nContent-Type: text/html; charset=ISO-8859-1\nContent-Transfer-Encoding: 7bit"); 
ahi funciona sin problemas !!

suerte!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:22.