Foros del Web » Programando para Internet » PHP »

Fallos en la funcion mail()

Estas en el tema de Fallos en la funcion mail() en el foro de PHP en Foros del Web. Tengo en mi web un formulario que manda los resultados mediante POST a enviar.php. que comienza así: <?php include ("claseform.php"); $_SESSION["sesion"]->enviar($_POST["nombre"], $_POST["apellidos"], $_POST["direccion"], $_POST["poblacion"], $_POST["cp"], ...
  #1 (permalink)  
Antiguo 21/03/2005, 08:00
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 19 años, 1 mes
Puntos: 2
Fallos en la funcion mail()

Tengo en mi web un formulario que manda los resultados mediante POST a enviar.php. que comienza así:
<?php
include ("claseform.php");
$_SESSION["sesion"]->enviar($_POST["nombre"], $_POST["apellidos"], $_POST["direccion"], $_POST["poblacion"], $_POST["cp"], $_POST["provincia"], $_POST["pais"], $_POST["email"]);
?>
se incluye una clase donde hay varias funcines, una de ellas es la función enviar:

function enviar($nombre, $apellidos, $direccion, $poblacion, $cp, $provincia, $pais, $email){
$this->cuerpo.="<br><br>nombre: " . $nombre . "<br>apellidos: " . $apellidos . "<br>direccion: " . $direccion . "<br>poblacion: " . $poblacion . " cp: " . $cp . "<br>provincia o estado: " . $provincia . "<br>pais: " . $pais . "<br>email: " . $email;
mail('[email protected],'formulario',$this->cuerpo);
}


alguien me dice que falla?? El caso eske no me da ningun error, me sale la pagina de enviar.php correctamente, pero el email no llega. he probado enviar a hotmail, mixmail, y varios, pero el email no llega.
  #2 (permalink)  
Antiguo 21/03/2005, 08:10
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Cita:
he probado enviar a hotmail
¿Has mirado en la carpeta de correo no deseado? Normalmente los emails enviados con mail() (sin hacer nada mas, normalmente por culpa de los admin de los servidores) suelen ser tomados como spam.

Segundo, mail() devuelve false si se ha producido algun error al pasar el correo a sendmail o al smtp. Verifica el valor devuelto en tu caso.

saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 21/03/2005, 13:47
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 19 años, 1 mes
Puntos: 2
Sí, he mirado en correo no deseado, y no está. probare lo del false... Y gracias por contestar
  #4 (permalink)  
Antiguo 21/03/2005, 17:00
Avatar de execon  
Fecha de Ingreso: enero-2002
Ubicación: Temuco
Mensajes: 179
Antigüedad: 22 años, 2 meses
Puntos: 0
Asumo que ésto es sólo un error de transcripción, de lo contrario, podría ser tu problema.
Código PHP:
mail('[email protected],'formulario,$this->cuerpo); 
__________________
----------------------------------
APP Developer
[email protected]
----------------------------------
  #5 (permalink)  
Antiguo 22/03/2005, 06:25
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 19 años, 1 mes
Puntos: 2
mail('[email protected]','formulario',$this->cuerpo);

si, era un fallo de transcripcion solo, sigue habiendo el mismo problema, no manda el mail a ninguna direccion de correo ni si quiera en no deseado, no lo manda simplemente. Ni tampoco da error. Hice un phpinfo y el servidor admite enviar mails. ¿entonces que falla?
  #6 (permalink)  
Antiguo 22/03/2005, 12:59
Avatar de execon  
Fecha de Ingreso: enero-2002
Ubicación: Temuco
Mensajes: 179
Antigüedad: 22 años, 2 meses
Puntos: 0
Hola, no sé si te sirva de algo, pero éste código que desarrollé usando funciones de una y otra parte trabaja en un 100% bien, revisalo y tal vez te sirva de algo.

Código PHP:
<? $HTTP_REQUEST_VARS['Subject'];
   
$HTTP_REQUEST_VARS['From'];
   
$HTTP_REQUEST_VARS['imagen'];

   
set_time_limit(0);
 
$dayarray=array("Domingo","Lunes","Martes","Miercoles","Jueves","Viernes","Sábado","Domingo");
 
$montharray=array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
 
$diasemanadate("w");
 
$diamesgmdate("d");
 
$mesgmdate("m");
 
$anogmdate("Y");

 
$lafecha=$dayarray[$diasemana].", ".$montharray[$mes-1]." ".$diames." de ".$ano;
 
$eventosmes=$montharray[$mes-1];
 
$newmes=$mes-1;
 
$eventomesiguiente=$montharray[$newmes+0];

if (
$send=="ok") {
### Leer archivo de mail
function mostrarTemplate($tema$variables
{   
    
$cod implode("", @file($tema)); 
    
ob_start(); 
    
extract($variables); 
    eval(
'?>'.$cod.'<?'); 
    
$temp=ob_get_contents(); 
    
ob_end_clean(); 
    return 
$temp


$archivo "../mails/plantilla.php";
$variablesmensaje= array ("lafecha" => $lafecha,
                          
"promocion" => $promocion,
                          
"lista" => $lista);
$Mensaje=mostrarTemplate($archivo$variablesmensaje);

### Escribir el archivo correspondiente al tipo de promoción

$archivo "../mails/".$promocion.".html";
$fp fopen($archivo"w+");
$contenido $Mensaje;
$write fputs($fp$contenido);
fclose($fp);

###

$BaseUsr=mysql_connect("***","***","***");
mysql_select_db("oba_obadat",$BaseUsr);
$SQLregistro=mysql_query("SELECT * FROM obamail",$BaseUsr);
$mails_enviados=0;
?>
<span class="tableenc"><strong>&nbsp;<font face="Arial, Helvetica, sans-serif">- 
Enviando...</font></strong><font face="Arial, Helvetica, sans-serif"> </font> 
<?
while ($Registro=mysql_fetch_array($SQLregistro)) { 
$Contacto_CorreoElectronico=$Registro["mail"];
sleep(1);
// 
$Nombre =$Registro["nombres"];
$apellidos=$Registro["apellidos"];

$headers  "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: ".$From." <[email protected]>\r\n";
$headers .= "Reply-To: <[email protected]>\r\n";
$headers .= "X-Mailer: PHP/" phpversion();
 if (
mail($Contacto_CorreoElectronico$Subject$Mensaje,$headers))
 {
    
$mails_enviados++;
  }
 else { echo 
"<b>No enviado a ".$Contacto_CorreoElectronico."</b>"; }
 
flush();
?>
<img src="images/good.gif"> [Total mails enviados: 
<?=$mails_enviados?>
]</span> 
<?
echo $Mensaje;
?>
Cómo funciona ?? Simple, rescato las variables Subject, From e imagen, utilizo una plantilla que leo en mostrartemplate(), descargo los correos de una base de datos y envío. El proceso de envío es un poco lento a veces, pero depende del servidor y de la cantidad de mails que envíes, la he probado hasta con 3000 cuentas de correo.

Si te sirve y encuentras que se puede mejorar, adelante, eso si, espero me lo comuniques

Saludos.
__________________
----------------------------------
APP Developer
[email protected]
----------------------------------
  #7 (permalink)  
Antiguo 22/03/2005, 18:02
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 19 años, 1 mes
Puntos: 2
Muchas gracias pero creo que el problema puede ser mas sencillo que eso: he hecho una pagina llamada prueba.php:
<?php
mail ("[email protected]", "prueba", "Mensaje de prueba");
?>
<html>
<head><title>prueba</title></head>
<body></body>
</html>
¿facil no? se supone que deberia de funcionar a la perfeccion, pues pasa lo mismo, no me da error, pero no manda el email. Puede ser del servidor imagino... no?
  #8 (permalink)  
Antiguo 22/03/2005, 18:09
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 19 años, 1 mes
Puntos: 17
Yo tengo el mismo problema en mi servidor...
sólo puedo mandar mails a @midominio
hace rato q lo estamos viendo y no sabemos q hacer :S
  #9 (permalink)  
Antiguo 23/03/2005, 08:56
 
Fecha de Ingreso: mayo-2002
Ubicación: Toluca
Mensajes: 229
Antigüedad: 21 años, 11 meses
Puntos: 2
Hola ... yo tengo el mismo problema.
Estoy ocupando la función mail() y solo manda correos cuando hay un recipiente del mismo dominio, ejemplo:
mi dominio es: alquiladora.com.mx
Si yo mando un correo a: [email protected] NO LLEGA
Si yo mando un correo a: [email protected] SI LLEGA
Si yo mando un correo a: [email protected], [email protected] SI LLEGA

Se me hace de lo mas raro, por que estaba funcionando perfectamente y contacté a mi Host y dicen que esta todo bien .. pero NO ... algo anda mal por que ya no envia correos a cuentas de otro dominio

Que pasa ???
Como lo solucionaron ???
AYUDDDDAAAAAAAAAAAAA !!!!!!!!!!!!!!


Saludos
  #10 (permalink)  
Antiguo 23/03/2005, 08:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Seppo
Yo tengo el mismo problema en mi servidor...
sólo puedo mandar mails a @midominio
hace rato q lo estamos viendo y no sabemos q hacer :S
Esque lo que hay que entender también es que todo no depende de PHP .. que hay un "servidor de correo (o MTA)" por médio que es quien finalmente envia el e-mail. PHP tan sólo (vía mail()) entrega el e-mail a dicho MTA (servidor sendmail, o un servidor SMTP directo . ..). Las restricciones de este, filtros según quien envie .. y demás las tienen que ver en dicho "MTA" y si no tienen acceso, consultar a quien lo tenga (proveedor).

PHP al conectar con el MTA y entregar el e-mail .. ya cumple su misión y devuelve "TRUE" .. Pero de ahí a que ese e-mail llegue a su destinatario ya es problema del MTA en sí.

Un saludo,
  #11 (permalink)  
Antiguo 23/03/2005, 09:03
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 19 años, 1 mes
Puntos: 17
Cluster, no sé bien cual es mi problema, seguramente sea la configuración de PHP de mi servidor porque el mismo código (indicando servidor SMTP) anduvo en otro servidor, sin embargo no sé como arreglarlo, que es lo que más me interesaría.
  #12 (permalink)  
Antiguo 23/03/2005, 09:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Seppo

Se que tienes un problema y que debes solventarlo . .pero si no lees bien lo que intenté exponer en el mensaje anterior no comprenderas por qué te funciona en un caso y en otro no ..

Tu mismo estás diciendo que usastes un servidor SMTP concreto y en otro caso es OTRO servidor SMTP concreto o MTA en general ..

Expon tu problema en un tema nuevo .. por qué Deben aclarar las condiciones de pruebas .. Pero -todo- apunta a que sus servidores SMTP (o MTA Mail transfer Agent) está imponiendo restricciones (pero como no especificas ni configuración de PHP de un sitio y de otro .. ni de que pruebas concretas has hecho ni código ..) .. Restricciones que PHP no controla ni tiene acceso .. Eso son temas que deben tratarlos con sus proveedores (si usan un servicio de hosting) y sino de revisar SU configuración de su servidor STMP o lo que usen .. PHP sólo entrega el e-mail al MTA .. no lo envia!.

Por lo demás .. si dices que tienes un servidor SMTP conocido que no te impone restricciones .. usalo directo . .no pases por mail() de PHP .. Puedes usar para tal fin la classe: PHP Mailer (http://phpmailer.sourceforge.net) (permite hasta usar autentificación por si tu servidor SMTP lo requiere).

Un saludo,
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 13:15.