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
-
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:
<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:
<?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:
// 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.
-
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.
-
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!
-
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:
<?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
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
-
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:
<?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!
-
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.
<?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
<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
// 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
-
¿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!
-
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
-
Hola! ¿Lograste resolverlo?
-
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
-
Ok, coméntanos algo cuando puedas.
-
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é.
-
Gracias por aclarar cómo lo resolviste :D
-
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.
-
me ayudo mucho este post, resolvi el problema gracias a su ayuda, asi quedo resuelta la parte del main.js
$.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() );
}