Autor Tema: función mail PHP establecer headers envío de email con formulario sendemail.php  (Leído 9042 veces)

dfa17

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Hola a todos.

Me he bajado una plantilla y no logro que me lleguen los mails que debe enviar, pero por más que reviso el código no encuentro el error. ¿Me echan una mano?

El código en el index es:

Código: [Seleccionar]
<form id="main-contact-form" name="contact-form" method="post" action="sendemail.php">
                <div class="row  wow fadeInUp" data-wow-duration="1000ms" data-wow-delay="300ms">
                  <div class="col-sm-6">
                    <div class="form-group">
                      <input type="text" name="name" class="form-control" placeholder="Nombre" required="required">
                    </div>
                  </div>
                  <div class="col-sm-6">
                    <div class="form-group">
                      <input type="email" name="email" class="form-control" placeholder="Email" required="required">
                    </div>
                  </div>
                </div>
                <div class="form-group">
                  <input type="text" name="subject" class="form-control" placeholder="Asunto" required="required">
                </div>
                <div class="form-group">
                  <textarea name="message" id="message" class="form-control" rows="4" placeholder="Ingrese su mensaje" required></textarea>
                </div>                       
                <div class="form-group">
                  <button type="submit" class="btn-submit">Enviar</button>
                </div>
              </form>   

Y el PHP (sendemail.php) es:

Código: [Seleccionar]
<?php
$name 
= @trim(stripslashes($_POST['name'])); 
$from = @trim(stripslashes($_POST['email'])); 
$subject = @trim(stripslashes($_POST['subject'])); 
$message = @trim(stripslashes($_POST['message'])); 
$to 'darifernandez17@gmail.com';//replace with your email

$headers = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=iso-8859-1";
$headers[] = "From: {$name} <{$from}>";
$headers[] = "Reply-To: <{$from}>";
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/".phpversion();

mail($to$subject$message$headers);

die;

y no se si tendrá que ver, pero existe también una carpeta js que contiene un archivo main.js donde está este código referido también al formulario:

Código: [Seleccionar]
// Contact form
var form = $('#main-contact-form');
form.submit(function(event){
event.preventDefault();
var form_status = $('<div class="form_status"></div>');
$.ajax({
url: $(this).attr('action'),
beforeSend: function(){
form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() );
}
}).done(function(data){
form_status.html('<p class="text-success">Gracias por contactarte con nosotros. En breve te responderemos</p>').delay(3000).fadeOut();
});
});


¿Saben donde puede estar el error?

Gracias.
« Última modificación: 22 de Febrero 2016, 20:49 por César Krall »

bermartinv

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 298
    • Ver Perfil
Re:Problemas con formulario sendemail.php
« Respuesta #1 en: 20 de Febrero 2016, 16:33 »
No he comprobado el código.
Solo decirte que ese código Javascript está escrito con jQuery, que es una libreria de javascript, sino la tienes importada en tu pagina web ese código no te va a funcionar.

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
El símbolo @ delante de las instrucciones php suprime los mensajes de error. Comprueba que tienes activado el debugging php (https://www.aprenderaprogramar.com/foros/index.php?topic=1261.0) y elimina la supresión de errores, puede que los mensajes de error te aclaren dónde tienes el problema

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

bambule

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
Buenas, a mí me pasa exactamente lo mismo, mismo archivo.

He activado el registro php y quitado las @ según indicáis.

Tengo la librería jQuery también.

En el registro no me viene nada, exceto si cargo el archivo sendemail.php con el siguiente código modificado:
Código: [Seleccionar]
<?php
$name       
trim(stripslashes($_POST['name'])); 
$from       trim(stripslashes($_POST['email'])); 
$subject1    trim(stripslashes($_POST['subject'])); 
$message    trim(stripslashes($_POST['message'])); 
$to    'info@ecad.es';

$headers  = array();
$headers  implode("\r\n"$headers);
$headers  "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";
$headers .= "From: {$name} <{$from}>\r\n";
$headers .= "Reply-To: <{$from}>\r\n";
$headers .= "Subject: {$subject1}\r\n";
$headers .= "X-Mailer: PHP/".phpversion()."\r\n";

mail($to$subject$message$headers);

die;

----------------------------

Que si que me dice

Código: [Seleccionar]
mod_fcgid: stderr: PHP Notice: Undefined index: name
también para email, subjet y message.

además de

mod_fcgid: stderr: PHP Notice: Undefined variable: subject

pero dándole al botón enviar no me llega nada de nada ni pone que haya error así que ni idea.

Cualquier cosa que os tenga que poner para que podáis ayudarme decirmelo.

Muchas gracias de antemano

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola!

Hay cosas raras en tu código

$headers  = implode("\r\n", $headers); no tiene sentido donde está

Estás declarando $headers como array pero después lo tratas como una cadena normal ¿?


Haz una prueba básica colocando esto al principio del fichero:

Código: [Seleccionar]
<?php
// Texto del correo
$msg "Gracias por inscribirte en nuestra pagina web\nDesde ahora puedes participar";

// usar wordwrap() si las líneas son muy largas
$msg wordwrap($msg,70);

// enviar email
mail("tucorreo@tucorreo.com","Confirmacion de inscripcion",$msg);
?>

Pon tu correo donde aparece tucorreo@tucorreo.com y comprueba que recibes el correo. Si no recibes puede ser que el servidor no esté ejecutando la función mail de php o que tengas algún problema de configuración.

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

bambule

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
He quitado el "implode" y añadido lo que me comentabas, dejando el código de la siguiente manera, si le doy directamente al archivo url/sendemail.php me llegan ahora dos emails puesto que has añadido un texto pero si le doy al botón enviar de la url no me sale nada de nada, ni mensaje en blanco ni nada extraño en el registro.

Código: [Seleccionar]
<?php
// Texto del correo
$msg "Gracias por inscribirte en nuestra pagina web\nDesde ahora puedes participar";

// usar wordwrap() si las líneas son muy largas
$msg wordwrap($msg,70);

// enviar email
mail("email@email.es","Confirmacion de inscripcion",$msg);
?>


<?php
$name       
trim(stripslashes($_POST['name'])); 
$from       trim(stripslashes($_POST['email'])); 
$subject1    trim(stripslashes($_POST['subject'])); 
$message    trim(stripslashes($_POST['message'])); 
$to    'email@email.es';

$headers  = array();
$headers  "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";
$headers .= "From: {$name} <{$from}>\r\n";
$headers .= "Reply-To: <{$from}>\r\n";
$headers .= "Subject: {$subject1}\r\n";
$headers .= "X-Mailer: PHP/".phpversion()."\r\n";

mail($to$subject$message$headers);

die;

En el index.html tengo

Código: [Seleccionar]
<form id="main-contact-form" name="contact-form" method="post" action="#">
                <div class="row  wow fadeInUp" data-wow-duration="1000ms" data-wow-delay="300ms">
                  <div class="col-sm-6">
                    <div class="form-group">
                      <input type="text" name="name" class="form-control" placeholder="Nombre" required="required">
                    </div>
                  </div>
                  <div class="col-sm-6">
                    <div class="form-group">
                      <input type="email" name="email" class="form-control" placeholder="Email" required="required">
                    </div>
                  </div>
                </div>
                <div class="form-group">
                  <input type="text" name="subject" class="form-control" placeholder="Asunto" required="required">
                </div>
                <div class="form-group">
                  <textarea name="message" id="message" class="form-control" rows="4" placeholder="Introduzca su mensaje" required="required"></textarea>
                </div>                       
                <div class="form-group">
                  <button type="submit" class="btn-submit">Enviar</button>
                </div>
              </form>   

Así mismo para el main.js

Código: [Seleccionar]
// Contact form
var form = $('#main-contact-form');
form.submit(function(event){
event.preventDefault();
var form_status = $('<div class="form_status"></div>');
$.ajax({
url: $(this).attr('action'),
beforeSend: function(){
form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Se está enviando su email...</p>').fadeIn() );
}
}).done(function(data){
form_status.html('<p class="text-success">Gracias por contactar con nosotros. Le responderemos tan pronto como nos sea posible</p>').delay(3000).fadeOut();
});
});

Aprovecho para decir aunque ya os habrás/habréis dado cuenta que no soy informático ni estoy habituado a este lenguaje trabajo con ordenadores pero no en el tema de estos lenguajes informáticos. Es decir, puede que el error lo tenga delante pero no lo sé.

Otra cosa que añadir, cuando le doy al botón de enviar sólo me sale el texto:

"Gracias por contactar con nosotros. Le responderemos tan pronto como nos sea posible"

En cambio, si uso el archivo index.html desde el explorador de windows me sale "Se está enviando su email..."

No sé si sirve de algo.

Gracias de nuevo por vuestra ayuda

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
¿Tienes el archivo sendemail.php en la misma carpeta?

¿Qué ocurre si escribes <form id="main-contact-form" name="contact-form" method="post" action="sendemail.php">?

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

bambule

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
Buenas,

Sí tengo el archivo sendemail.php en la misma carpeta que index.html.

Creía que ya había probado a cambiar la almoadilla '#' por 'sendemail.php' pero parece ser que no fue así, ahora si me llegan emails a la dirección destino, uno en blanco y el otro "Gracias por inscribirte en nuestra pagina web Desde ahora puedes participar".

Vamos avanzando, muchas gracias.

Ahora creo que falta que se envíen los datos al sendemail.php

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola! ¿Lograste resolverlo?
Responsable de departamento de producción aprenderaprogramar.com

bambule

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
Buenas César,

No todavía no he podido ando un poco perdido pero en cuanto lo solucione (si lo consigo) os lo comento por si alguien tuviera el mismo problema.

Un saludo

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Ok, coméntanos algo cuando puedas.
Responsable de departamento de producción aprenderaprogramar.com

bambule

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
Buenas a todos después de tanto tiempo, por temas de trabajo decidí aparcar la lucha contra el tema de la web pero hace unos días que me puse y siendo las 2:56 de la madrugada puedo decir que por fin lo conseguí.

En el index.html cambié la almohadilla (#) por 'sendemail.php'

Y en el main.js añadí antes de la url en la parte de contacto las líneas

data: form.serialize(),
type: ‘post’,

Y listo.

Muchas gracias a todos por su ayuda y paciencia conmigo, si a alguien le hace falta alguna aclaración o mayor información con mucho gusto les ayudaré.
« Última modificación: 08 de Octubre 2016, 18:26 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Gracias por aclarar cómo lo resolviste  :D

hugo2o

  • Sin experiencia
  • *
  • Mensajes: 1
    • Ver Perfil
Hola bambule,

¿Podrías poner como queda la parte de contacto de tu main.js? No tengo claro donde colocas esas dos líneas que dices. Con los otros cambios me llega el correo, pero veo que no coge los datos del formulario.

Gracias.

yisus211

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
me ayudo mucho este post, resolvi el problema gracias a su ayuda, asi quedo resuelta la parte del main.js
Código: [Seleccionar]
$.ajax({
data: form.serialize(),
type: 'post',
url: $(this).attr('action'),
beforeSend: function(){
form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Enviando correo electronico...</p>').fadeIn() );
}

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".