Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: dfa17 en 19 de Febrero 2016, 22:36

Título: función mail PHP establecer headers envío de email con formulario sendemail.php
Publicado por: dfa17 en 19 de Febrero 2016, 22:36
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.
Título: Re:Problemas con formulario sendemail.php
Publicado por: bermartinv 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.
Título: Re:función mail PHP establecer headers envío de email con formulario sendemail.php
Publicado por: César Krall en 22 de Febrero 2016, 20:52
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!
Título: Re:función mail PHP establecer headers envío de email con formulario sendemail.php
Publicado por: bambule en 20 de Mayo 2016, 14:24
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
Título: Re:función mail PHP establecer headers envío de email con formulario sendemail.php
Publicado por: César Krall en 20 de Mayo 2016, 15:04
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!
Título: Re:función mail PHP establecer headers envío de email con formulario sendemail.php
Publicado por: bambule en 20 de Mayo 2016, 19:40
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
Título: Re:función mail PHP establecer headers envío de email con formulario sendemail.php
Publicado por: César Krall en 22 de Mayo 2016, 21:49
¿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!
Título: Re:función mail PHP establecer headers envío de email con formulario sendemail.php
Publicado por: bambule en 28 de Mayo 2016, 12:42
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
Título: Re:función mail PHP establecer headers envío de email con formulario sendemail.php
Publicado por: César Krall en 04 de Junio 2016, 23:46
Hola! ¿Lograste resolverlo?
Título: Re:función mail PHP establecer headers envío de email con formulario sendemail.php
Publicado por: bambule en 06 de Junio 2016, 20:17
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
Título: Re:función mail PHP establecer headers envío de email con formulario sendemail.php
Publicado por: César Krall en 15 de Junio 2016, 22:16
Ok, coméntanos algo cuando puedas.
Título: Re:función mail PHP establecer headers envío de email con formulario sendemail.php
Publicado por: bambule en 27 de Septiembre 2016, 02:59
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é.
Título: Re:función mail PHP establecer headers envío de email con formulario sendemail.php
Publicado por: Ogramar en 08 de Octubre 2016, 18:27
Gracias por aclarar cómo lo resolviste  :D
Título: Re:función mail PHP establecer headers envío de email con formulario sendemail.php
Publicado por: hugo2o en 03 de Noviembre 2016, 13:02
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.
Título: Re:función mail PHP establecer headers envío de email con formulario sendemail.php
Publicado por: yisus211 en 28 de Diciembre 2016, 06:26
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() );
}