Foros del Web » Programando para Internet » PHP »

PHP OO No recibo email a través del formulario

Estas en el tema de No recibo email a través del formulario en el foro de PHP en Foros del Web. Muy buenas señores! Llevo un par de días comiéndome la cabeza con un problema que ha surgido en una web que desarrollé hace tiempo. La ...
  #1 (permalink)  
Antiguo 27/02/2016, 13:07
 
Fecha de Ingreso: marzo-2012
Mensajes: 10
Antigüedad: 12 años, 7 meses
Puntos: 0
No recibo email a través del formulario

Muy buenas señores!

Llevo un par de días comiéndome la cabeza con un problema que ha surgido en una web que desarrollé hace tiempo. La web en cuestión es www.flexacademy.co/ (si ".co"). En dicha web existen ciertos formularios de contacto. Dichos formularios han dejado de funcionar correctamente cuando antes iban a la perfección y no consigo encontrar dónde está el problema.

Me imagino que tendrá algo que ver con alguna actualización que el host ha hecho de la versión de PHP. En concreto está usando la versión 5.6.18.

Para hacer más sencillo el tema he creado un formulario más básico, pero que igualmente no consigo recibir el correo electrónico con los datos enviados desde el formulario.

El formulario está alojado en el host y lo ejecuto desde alli, concretamente, utilizo 123-reg.co.uk como web hosting.

Código PHP:

Código:
<?php

error_reporting(E_ALL);
ini_set('display_errors', true);

$nombre = $_POST['nombre'];
$mail = $_POST['email'];

$header = 'From: ' . $mail . " \r\n";
$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";

$mensaje = "Este mensaje fue enviado por " . $nombre . " \r\n";
$mensaje .= "Su e-mail es: " . $mail . " \r\n";
$mensaje .= "Mensaje: " . $_POST['texto'] . " \r\n";
$mensaje .= "Enviado el " . date('d/m/Y', time());

$para = '[email protected]';

$asunto = 'WEB: solucitud de informacion.';


if(mail($para, $asunto, utf8_decode($mensaje), $header)){
echo 'Mensaje enviado correctamente';
echo error_reporting(E_ALL);

}
else{
echo 'No se pudo enviar el mensaje. Intentelo de nuevo, gracias.';
echo error_reporting(E_ALL);

}
?>

Lo cual, cuando lo ejecuto, no me devuelve ningún error, me da como resultado:

Código:
Mensaje enviado correctamente6421
Otra cosa que he intentado ha sido probar desde otro hosting por si había algún bloqueo desde el anterior. Así que probé con www.000webhost.com pero lamentablemente el resultado fue el mismo, no recibo absolutamente nada.

Me dice que el mensaje se ha enviado pero yo no recibo nada. Por si sirve de ayuda estoy intentando que me envíe el correo de confirmación.

Espero haberme explicado claramente y sobre todo que alguien pueda echarme un cable porque ya no sé a que se debe este problema.

Gracias de antemano. Un saludo!!
  #2 (permalink)  
Antiguo 27/02/2016, 14:06
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: No recibo email a través del formulario

Te recuerdo visites el manual, para que entiendas las limitación de la función mail().

PHP no es un servidor de correo, por lo tanto la función mail() no sirve de mucho mientras no tengas un servidor SMTP correctamente instalado y configurado en tu host.

Eso se explica en el manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 28/02/2016, 07:02
 
Fecha de Ingreso: marzo-2012
Mensajes: 10
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: No recibo email a través del formulario

Gracias por tu respuesta pateketrueke.

Me imagino que te refieres a este manual: http://php.net/manual/en/function.mail.php, es correcto?

Lo extraño es que los formularios han funcionado durante mucho tiempo en la web y de golpe y porrazo dejaron de funcionar, no sé si tiene algo que ver con lo que me has comentado acerca del servidor SMTP.
  #4 (permalink)  
Antiguo 28/02/2016, 09:01
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: No recibo email a través del formulario

Cita:
no sé si tiene algo que ver con lo que me has comentado acerca del servidor SMTP.
Definitivamente sí, todo eso tiene que ver.

¿De qué otra forma explicarías que el mismo código, sin cambios, deje de funcionar de un día para otro?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 28/02/2016, 20:47
 
Fecha de Ingreso: marzo-2012
Mensajes: 10
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: No recibo email a través del formulario

Muchas gracias de nuevo pateketrueke. Entendido.

En lugar de usar la función mail(), es más recomendable utilizar PHPMailer?
  #6 (permalink)  
Antiguo 28/02/2016, 22:15
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: No recibo email a través del formulario

Cita:
Iniciado por zurferitox Ver Mensaje
Muchas gracias de nuevo pateketrueke. Entendido.

En lugar de usar la función mail(), es más recomendable utilizar PHPMailer?
Sí, es buena opción.

Considera que aún así necesitas un servidor SMTP en algún lado que te sirva.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 07/03/2016, 06:57
 
Fecha de Ingreso: marzo-2012
Mensajes: 10
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: No recibo email a través del formulario

Muchas gracias por tu ayuda pateketrueke y perdón por la demora en mi respuesta.

Disculpa, mi ignorancia pero hay cosas que no me quedan muy claras, es lo que tiene ser novato...

Según lo que me has comentado, para que los clientes puedan utilizar un formulario ya sea de contacto o de suscripción en mi web y que tanto ellos como yo reciba la información en la bandeja de entrada, es necesario tener configurado un servidor SMTP?

Yo es que tenia la falsa idea de que cuando alojabas la web en algún host ya tenia preactiavada o preconfigurada esta opción de ahí que me centrase todo el tiempo en creer que había algún tipo de error en el código PHP.

Te agradecería mucho tu explicación para aclararme de una vez con este tema.

Gracias de nuevo de antemano.
  #8 (permalink)  
Antiguo 07/03/2016, 08:37
 
Fecha de Ingreso: marzo-2012
Mensajes: 10
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: No recibo email a través del formulario

He seguido los pasos que se indican en este tutorial:

[URL="http://www.maestrosdelweb.com/phpmysqlap/"]http://www.maestrosdelweb.com/phpmysqlap/[/URL]

Y tras configurar Apache, PHP y MySQL en mi ordenador de forma local e seguido los pasos para instalar un servidor de correo SMTP. De hecho ahora mismo estoy probando en local el siguiente script:

Código PHP:
<?php
$to 
'[email protected]';
$subject 'Hello from XAMPP!';
$message 'This is a test';
$headers "From: me@localhost\r\n";
if (
mail($to$subject$message$headers)) {
   echo 
"SUCCESS";
} else {
   echo 
"ERROR";
}
?>
Supuestamente funcionó porque recibo el mensaje de SUCCESS pero no he recibido ningún correo electrónico (ni en el inbox ni en SPAM), nada de nada.

Alguien sabe porque puede ser?

Muchas gracias por vuestro tiempo.

Un saludo.
  #9 (permalink)  
Antiguo 07/03/2016, 11:21
 
Fecha de Ingreso: noviembre-2015
Mensajes: 23
Antigüedad: 9 años
Puntos: 0
Respuesta: No recibo email a través del formulario

Cita:
Iniciado por zurferitox Ver Mensaje
He seguido los pasos que se indican en este tutorial:

[URL="http://www.maestrosdelweb.com/phpmysqlap/"]http://www.maestrosdelweb.com/phpmysqlap/[/URL]

Y tras configurar Apache, PHP y MySQL en mi ordenador de forma local e seguido los pasos para instalar un servidor de correo SMTP. De hecho ahora mismo estoy probando en local el siguiente script:

Código PHP:
<?php
$to 
'[email protected]';
$subject 'Hello from XAMPP!';
$message 'This is a test';
$headers "From: me@localhost\r\n";
if (
mail($to$subject$message$headers)) {
   echo 
"SUCCESS";
} else {
   echo 
"ERROR";
}
?>
Supuestamente funcionó porque recibo el mensaje de SUCCESS pero no he recibido ningún correo electrónico (ni en el inbox ni en SPAM), nada de nada.

Alguien sabe porque puede ser?

Muchas gracias por vuestro tiempo.

Un saludo.

Puede que me equivoque porque aunque se algo, aun soy iniciado en el tema, pero creo que si defines un servidor local, no tienes acceso a red y por lo tanto aunque recibas el mensaje de SUCCESS, solo significa que mail() = true, pero el mensaje nunca llegara por estar en modo local.
  #10 (permalink)  
Antiguo 07/03/2016, 20:32
 
Fecha de Ingreso: marzo-2012
Mensajes: 10
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: No recibo email a través del formulario

Muchas gracias ls_52 por tu mensaje.

Por tu comentario entiendo que al estar ejecutándolo en local jamás enviará el email a menos que utilice un servidor SMTP instalado previamente en mi máquina como por ejemplo, Mercury. ¿Es correcto?


Hasta aquí, lo entiendo, lo que sigo sin saber es dónde esta el maldito fallo cuando ejecuto un script básico como este en desde un webhosting, he probado en varios y no recibo email a pesar de que me aparezca el mensaje de "email enviado con éxito".

Código PHP:
<?php
// contenido del mensaje
$mensaje 'Hola,

Te estoy enviando este correo desde  PHP...

Saludos,

Mi nombre'
;

//envio del mensaje
if (mail("[email protected]""probando enviar un correo desde php"$mensaje)){
    echo 
"email enviado con éxito";

}else{
    echo 
"fallo al enviar el mensaje";
}

?>
Entiendo perfectamente por los comentarios de pateketrueke que el fallo estará en la configuración del servidor SMTP, pero he seguido algunos tutoriales y videotutoriales y no doy con el maldito fallo.

Alguna sugerencia?

Agradezco mucho vuestro tiempo y ayuda.

Saludos.
  #11 (permalink)  
Antiguo 11/03/2016, 21:31
 
Fecha de Ingreso: marzo-2012
Mensajes: 10
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: No recibo email a través del formulario

Muy buenas de nuevo. Aquí sigo intentando resolver este problema que me tiene bastante frustrado.

Esta vez lo que he probado ha sido realizar un pequeño formulario, pasar los datos mediante POST a un archivo PHP y tratar de enviar esos datos por correo electrónico usando PHPMailer.

Este sería el formulario, donde se recogen los datos del usuario:

Código HTML:
 <form id="form1" class="well col-lg-12" action="enviar.php" method="post" name="form1" enctype="multipart/form-data">
      <div class="row">
       <div class="col-lg-6">
        <label>Nombre*</label> <input id="Nombre" class="form-control" type="text" name="Nombre" /> 
        <label>Email*</label> <input id="Email" class="form-control" type="email" name="Email" />
       </div>
        <div class="col-lg-6"><label>Mensaje*</label> 
         <textarea id="Mensaje" class="form-control" name="Mensaje" rows="4"></textarea>
        </div>
         <div class="col-lg-12">
    <label for="exampleInputFile">Adjuntar archivo</label>
    <input type="file" name="adjunto" id="archivo-adjunto">
    <p class="help-block">Example block-level help text here.</p>
  </div>
        <button class="btn btn-default pull-right" type="submit">Enviar</button>
      </div>
    </form> 
Y este sería el archivo PHP:

Código PHP:
<?php

$Nombre 
$_POST['Nombre'];
$Email $_POST['Email'];
$Mensaje $_POST['Mensaje'];
$archivo $_FILES['adjunto'];

if (
$Nombre=='' || $Email=='' || $Mensaje==''){

echo 
"<script>alert('Los campos marcados con * son obligatorios');location.href ='javascript:history.back()';</script>";

}else{

    require(
"archivosformulario/class.phpmailer.php");
    
$mail = new PHPMailer();

    
$mail->From     $Email;
    
$mail->FromName $Nombre
    
$mail->AddAddress("[email protected]"); // Dirección a la que llegaran los mensajes.
   
// Aquí van los datos que aparecerán en el correo que reciba
    //adjuntamos un archivo 
        //adjuntamos un archivo
            
    
$mail->WordWrap 50
    
$mail->IsHTML(true);     
    
$mail->Subject  =  "Contacto";
    
$mail->Body     =  "Nombre: $Nombre \n<br />".    
    
"Email: $Email \n<br />".    
    
"Mensaje: $Mensaje \n<br />";
    
$mail->AddAttachment($archivo['tmp_name'], $archivo['name']);
    
    
    

// Datos del servidor SMTP

        
$mail->IsSMTP(); 
    
$mail->SMTPDebug  2;    
        
$mail->Host "smtp.gmail.com";  // Servidor de Salida.
    
$mail->SMTPAuth true
    
$mail->Port 465;
    
$mail->SMTPSecure "ssl"
        
$mail->Username "[email protected]"
        
$mail->Password "micontraseña"
    
    if (
$mail->Send())
    echo 
"<script>alert('Formulario enviado exitosamente, le responderemos lo más pronto posible.');location.href ='javascript:history.back()';</script>";
    else
    echo 
"<script>alert('Error al enviar el formulario');location.href ='javascript:history.back()';</script>";

}

?>
Pues bien, esto ejecutado en local, funciona perfectamente. Recibo los mensaje a mi email sin ningún problema.

En el momento que lo subo a mi host, deja de funcionar. He probado en dos (123-reg.co.uk y 000webhost) y en ninguno funciona.

He probado a editar el archivo de PHP, con los datos del propio dominio, es decir, el archivo PHP quedaría de la siguiente forma:

Código PHP:
<?php

$Nombre 
$_POST['Nombre'];
$Email $_POST['Email'];
$Mensaje $_POST['Mensaje'];
$archivo $_FILES['adjunto'];

if (
$Nombre=='' || $Email=='' || $Mensaje==''){

echo 
"<script>alert('Los campos marcados con * son obligatorios');location.href ='javascript:history.back()';</script>";

}else{


    require(
"archivosformulario/class.phpmailer.php");
    
$mail = new PHPMailer();

    
$mail->From     $Email;
    
$mail->FromName $Nombre
    
$mail->AddAddress("[email protected]"); // Dirección a la que llegaran los mensajes.
   
// Aquí van los datos que apareceran en el correo que reciba
    //adjuntamos un archivo 
        //adjuntamos un archivo
            
    
$mail->WordWrap 50
    
$mail->IsHTML(true);     
    
$mail->Subject  =  "Contacto";
    
$mail->Body     =  "Nombre: $Nombre \n<br />".    
    
"Email: $Email \n<br />".    
    
"Mensaje: $Mensaje \n<br />";
    
$mail->AddAttachment($archivo['tmp_name'], $archivo['name']);
    
    
    

// Datos del servidor SMTP

        
$mail->IsSMTP(); 
        
$mail->SMTPDebug  2;            
        
$mail->Host "smtp.123-reg.co.uk";  // Servidor de Salida.
    
$mail->SMTPAuth true
    
$mail->Port 25;
        
$mail->Username "[email protected]"
        
$mail->Password "contraseña";
    
    if (
$mail->Send())
    echo 
"<script>alert('Formulario enviado exitosamente, le responderemos lo más pronto posible.');location.href ='javascript:history.back()';</script>";
    else
    echo 
"<script>alert('Error al enviar el formulario');location.href ='javascript:history.back()';</script>";

}

?>
Y me salta el siguiente mensaje de error:

Código:
SMTP Error: Data not accepted
Por más vueltas que le doy no entiendo como hacerlo funcionar en mi dominio que es donde me interesa para que funcionen correctamente los formularios de contacto de la web.

Alguien podría echarme una mano, por favor?

Muchas gracias a todos por vuestro tiempo.

Un saludo.
  #12 (permalink)  
Antiguo 12/03/2016, 00:50
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 21 años
Puntos: 154
Respuesta: No recibo email a través del formulario

Hola zurferitox,

En el ejemplo que copié yo hace algunos años (y aún sigue funcionando) y que no recuerdo de dónde fue, venía esto:

Código PHP:
Ver original
  1. //La clase phpmailer tiene un pequeño bug y es que cuando envia un mail con
  2. //attachment la variable ErrorInfo adquiere el valor Data not accepted, dicho
  3. //valor no debe confundirnos ya que el mensaje ha sido enviado correctamente
  4.     if ($mail->ErrorInfo=="SMTP Error: Data not accepted") {
  5.        $exito=true;
  6.         }

Quizá sea eso, pero no lo sé en tu caso, ahí te lo dejo por si te ayuda, espero que te sirva.
  #13 (permalink)  
Antiguo 13/03/2016, 15:55
 
Fecha de Ingreso: marzo-2012
Mensajes: 10
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: No recibo email a través del formulario

rbczgz muchas gracias por tu respuesta.

Tendré muy en cuenta lo que me dices para futuras pruebas. De todos modos, te confirmo que por más que intento enviar los datos recibido desde el formulario a mi correo electrónico, no consigo recibir ningún mensaje, es decir, no me llega nada al correo. Y he probado con una cuenta de Gmail y otra de Hotmail, pero no hay manera.

Estoy un poco frustrado con este tema porque el formulario de contacto es básico para una web y no consigo hacer que funcione correctamente.... :(

Ya no sé que más puedo hacer. Se admiten sugerencias.

Gracias a todos! Saludos.
  #14 (permalink)  
Antiguo 13/03/2016, 17:14
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 8 años, 11 meses
Puntos: 39
Respuesta: No recibo email a través del formulario

Cita:
your server dosen't allow different sender and username you should config: $mail->From like $mail->Username

Te dejo el link de stack, quizá pueda ser eso.

link
  #15 (permalink)  
Antiguo 15/03/2016, 18:59
 
Fecha de Ingreso: enero-2009
Ubicación: Kandor
Mensajes: 209
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: No recibo email a través del formulario

Si ya tienes el servidor de correo, usa phpMailer:


function enviar_correo($destinatarios, $mail_asunto, $mail_contendio_html, $from, $from_name, $archivos_adjuntos_ruta,$archivos_adjuntos_temp){
$mail= new PHPMailer(); // defaults to using php "mail()"
$mail->CharSet = 'UTF-8';
$body= $mail_contendio_html;
$mail->IsSMTP(); // telling the protocol to use SMTP
$mail->Host = "mail.patronato.unam.mx"; // SMTP server
$mail->From = $from;
$mail->FromName = $from_name;
$mail->Subject = $mail_asunto;
$mail->MsgHTML($body);
$destinatarios=explode(",", $destinatarios);
if(!empty($destinatarios)){
foreach($destinatarios as $un_destinatario){
$mail->AddAddress($un_destinatario); //destinatarios
}
}else{
return false;
}
if(!empty($archivos_adjuntos_ruta)){
foreach($archivos_adjuntos_ruta as $archivo){
$mail->AddAttachment($archivo); // attachment
}
}
if(!empty($archivos_adjuntos_temp)){
foreach($archivos_adjuntos_temp as $nombrearchivo=>$contenidoArchivo){
$mail->AddStringAttachment($contenidoArchivo,$nombrearch ivo,'base64');
}
}
$mail->Timeout = 20;
if($mail->Send()) {
return array(true);
}else {
return array(false,"Mailer Error: ".$mail->ErrorInfo);
}
}
$destinatarios="[email protected],[email protected] m,";
$archivos_adjuntos_temp = array("nombreArchivo.pdf"=>"contenido...........") ;
$archivos_adjuntos_proveedor=array("/ruta/al/archivo1.pdf","/ruta/al/archivo2.pdf");
enviar_correo($destinatarios,$asunto, $mail_contendio_proveedor,$micorreo, $misitio, $archivos_adjuntos_proveedor,$archivos_adjuntos_te mp);

Etiquetas: email, formulario, recibo
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 06:17.