Funcion Mail PHP no funciona

Namaris

Tengo este form predeterminado de una plantilla HTML CSS y no tenia definido la funcon php para enviar el mail, asi que mirando tutoriales he creado yo la funcion pero no me llega el correo en ningun momento, he revisado el codigo varias veces pero no entiendo que falla.

FORMULARIO HTML CSS

<div class="box-contact">
    <h3> consultas:</h3>
    <form id="contact-form" method="post" action="">
      <div class="success"> Consulta Enviada! <strong>Pronto nos pondremos en contacto con usted, gracias.</strong> </div>
      <fieldset>
        <div class="coll-1">
          <div>
            <div class="form-txt">su nombre:</div>
            <label class="name">
              <input type="text" name="name">
              <span class="error">*Esto no es un nombre valido.</span> <span class="empty">*Campo Requerido.</span> </label>
            <div class="clear"></div>
          </div>
          <div>
            <div class="form-txt">telefono:</div>
            <label class="phone">
              <input type="tel" name="phone">
              <span class="error">*Telefono no valido.</span> <span class="empty">*Campo Requerido.</span> </label>
            <div class="clear"></div>
          </div>
          <div>
            <div class="form-txt">Email:</div>
            <label class="email">
              <input type="email" name="email">
              <span class="error">*E-mail no valido.</span> <span class="empty">*Campo Requerido.</span> </label>
            <div class="clear"></div>
          </div>
        </div>
        <div class="coll-2">
          <div>
            <div class="form-txt">mensaje:</div>
            <label class="message">
              <textarea></textarea>
              <span class="error">*Mensaje demasiado corto.</span> <span class="empty">*Campo Requerido.</span> </label>
            <div class="clear"></div>
          </div>
        </div>
        <div class="clear"></div>
        <div class="btns"> <a class="btn" data-type="reset">limpiar</a> <a class="btn" data-type="submit" name="submit"> enviar</a> </div>
      </fieldset>
    </form>
  </div>

FUNCION MAIL DE PHP

<?php

if(isset($_POST['submit'])) 
{
    $from = $_POST['name'];
    $subject = "Mail desde la pagina web";
    $phone = $_POST['phone'];
    $to = "[email protected]";

mail($to, $subject, $phone);
}
?>
O

Para el botón de envió prueba con un
<input type="submit" value="Submit">

si quieres utilizar un link tienes que utilizar el evento onclick
onclick="form.submit();"

1 respuesta
Namaris

#2 no esta bien el boton de "enviar" en la linea 39 del codigo?

Este es el form: http://restaurantcanpages.es/contacto.php

No sé si seria usar el evento onclick aqui como tu dices o no corresponde.

1 respuesta
lebroN

#1 Prueba cambiando esta linea:

<a class="btn" data-type="submit" name="submit"> enviar</a>

Por esta:

<a href="javascript:;" onclick="document.getElementById('contact-form').submit();" class="btn" data-type="submit" name="submit"> enviar</a>
1 respuesta
O

#3 en la página que comentas, se utiliza un archivo JS para el envió.
form.js

añade un evento con la siguiente linea

.bind('submit',function(){
  if(_.validate)
      submitFu()
   else
      _.form[0].submit()
return false
})

que llama a la función submitFU() que realiza el envió del form

submitFu:function(){
	_.validateFu(_.labels)							
	if(!_.form.has('.'+_.invalidCl).length)
		$.ajax({
			type: "POST",
			url:_.mailHandlerURL,
			data:{
				name:_.getValFromLabel($('.name',_.form)),
				email:_.getValFromLabel($('.email',_.form)),
				phone:_.getValFromLabel($('.phone',_.form)),
				fax:_.getValFromLabel($('.fax',_.form)),
				state:_.getValFromLabel($('.state',_.form)),
				message:_.getValFromLabel($('.message',_.form)),
				owner_email:_.ownerEmail,
				stripHTML:_.stripHTML
			},
			success: function(){
				_.showFu()
			}
		})			
},

Un saludo

1 respuesta
Namaris

#4 He probado cambiarlo por lo que dices pero sigue sin funcionar.

#5 Me has pasado por encima xD, primero no entiendo si el codigo que me has pasado es PHP, Javascript o Ajax :D

Me gustaría usar una solucion que usará solamente PHP, ya que realmente con todo esto lo que estoy haciendo es aprender y poner en practica los tutoriales de PHP que estoy leyendo :)

Gracias

2 respuestas
lebroN

#6 Una pregunta. Cuando pulsas el botón de enviar, ¿te lleva a otra página (estaría funcionando el submit) o se queda en la misma? Es para saber si el error es del php o directamente del botón.

edit:

Me he dado cuenta de que en el action del formulario no estás llamando al fichero de php, que es a donde van a enviarse los datos después de hacer el submit.

Esto es lo que tu tienes:

<form id="contact-form" method="post" action="">

Y esto más o menos lo que deberías tener:

<form id="contact-form" method="post" action="enviar_formulario.php">

donde enviar_formulario.php sería el fichero en el que tienes que tener el código de php que has puesto.

2 respuestas
O

#6 si estas empezando lo mejor será que entiendas cada 1 de los pasos.
No intentes hacer un copiar y pegar porque por mucho que te funcione no te va a servir para nada.
La página oficial de php tiene un ejemplo de formulario bastante sencillo que te puede servir de ayuda.
http://php.net/manual/es/tutorial.forms.php

Como te dice muy bien #7 no tienes el action en el formulario. El action es al archivo php al que llamas para procesar el formulario.
De todas formas tal y como te he dicho, el ejemplo que has pasado utiliza javascript para verificar y posteriormente enviar el formulario.
Para que funcione necesitaras añadir la action en el form y modificar el el botón de envio.
El botón mas sencillo para empezar es este

<input type="submit" value="Submit">

Un saludo y suerte

1 respuesta
Namaris

#7 #8

Es que el action lo he dejado en blanco ya que el codigo php del mail esta en el mismo archivo del form, no he querido hacer otro archivo solo para poner una funcion de mail.

#8 Que es lo que verifica ese Javascript? Por ahora solo he estudiado HTML, algo de CSS y ahora estoy con el PHP...Javascript lo dejé para más adelante... :psyduck:

1 respuesta
lebroN

#9 Si quieres que se ejecute el php teniéndolo en la misma página tienes que poner esto en el action:

action="<?php echo $_SERVER['PHP_SELF']; ?>"

Si no pones eso las variables con $_POST no se van a crear ya que no se las estás enviando a ningún sitio. A ver si así te funciona jaja

1 respuesta
Namaris

#10 Ni asi xD No se que es lo que estoy haciendo mal...¿El form lo veis bien escrito? las etiquetas del submit y todo?

1 respuesta
O

#11 copia todo el código del archivo aquí y te lo miro.

1 respuesta
Namaris

#12 Gracias

<?php

if(isset($_POST['submit'])) {
    $from = $_POST['name'];
    $subject = "Restaurant Can Pages Web";
    $phone = $_POST['phone'];
    $header = "hola";
    $to = "[email protected]";

mail($to, $subject, $phone,$header);
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
<script type="text/javascript" src="js/jquery-1.7.min.js"></script>
<script type="text/javascript" src="js/forms.js"></script>
<title>Contacts</title>
<meta charset="utf-8">
<!--css-->
<link rel="stylesheet" href="css/reset.css" type="text/css" media="screen">
<link rel="stylesheet" href="css/style.css" type="text/css" media="screen">
<link rel="stylesheet" href="css/grid.css" type="text/css" media="screen">
<link rel="icon" href="images/favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon" />
<link href='http://fonts.googleapis.com/css?family=PT+Serif+Caption:400,400italic' rel='stylesheet' type='text/css'>
<!--js-->
<script type="text/javascript" src="js/jquery-1.7.1.min.js" ></script>
<script type="text/javascript" src="js/superfish.js"></script>
<script type="text/javascript" src="js/forms.js"></script>
<script type="text/javascript">
    $(function(){
	 $('#contact-form').forms({
	  ownerEmail:'[email protected]'
	 })
	})
</script>
<!--[if lt IE 8]>
      <div style=' clear: both; text-align:center; position: relative;'>
        <a href="http://windows.microsoft.com/en-US/internet-explorer/products/ie/home?ocid=ie6_countdown_bannercode">
          <img src="http://storage.ie6countdown.com/assets/100/images/banners/warning_bar_0000_us.jpg" border="0" height="42" width="820" alt="You are using an outdated browser. For a faster, safer browsing experience, upgrade for free today." />
       </a>
     </div>
      <link href='http://fonts.googleapis.com/css?family=PT+Serif+Caption:400italic' rel='stylesheet' type='text/css'>
      <link href='http://fonts.googleapis.com/css?family=PT+Serif+Caption:400' rel='stylesheet' type='text/css'>
    <![endif]-->

<!--[if lt IE 9]>
   		<script src="js/html5.js"></script>
  		<link rel="stylesheet" href="css/ie.css"> 
      <link href='http://fonts.googleapis.com/css?family=PT+Serif+Caption:400italic' rel='stylesheet' type='text/css'>
      <link href='http://fonts.googleapis.com/css?family=PT+Serif+Caption:400' rel='stylesheet' type='text/css'>
	<![endif]-->

</head>

<body>

<!--==============================header=================================-->
<header>
  <div class="line-top"></div>
  <div class="main">
    <div class="row-top">
      <h1><a href="index.html"><img alt="" src="images/logo.png"></a></h1>
      <nav>
        <ul class="sf-menu">
          <li><a href="index.html">INICIO</a></li>
          <li><a href="menu.html">CARTA</a> <ul>
              <li><a href="#">MENU 1</a></li>
              <li><a href="#">MENU 2</a>
              <li><a href="#">MENU 3</a></li>
            </ul></li>
          <li><a href="reservas.html">RESERVAS</a>
            
</li> <li><a href="galeria.html">GALERIA</a> </li> <li></li> <li class="active"><a href="contacto.html">ContactO</a> </li> </ul> </nav> <div class="clear"></div> </div> </div> </header> <!--==============================content=================================--> <section id="content"><div class="ic">More Website Templates @ TemplateMonster.com. December03, 2012!</div> <div class="border-horiz"></div> <div class="main"> <h3>informacion de contacto</h3> <div class="box-address"> <h4>restaurante can pages</h4> <dl class="address"> <dt>08201 sabadell,<br> crta. prat, km3.</dt> <dd>telefono: +93 716 7494</dd> <dd>movil: +1 959 603 6035</dd> <dd> E-mail: <a class="mail-1" href="#">[email protected]</a> </dd> </dl> </div> <div class="map box-img"> <iframe src="https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d2984.6484287709063!2d2.095304!3d41.57685299999999!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x12a494e15e3b5231%3A0x1c55f10965b0408d!2sRestaurante+Can+Pag%C3%A9s!5e0!3m2!1ses!2ses!4v1429714052987" width="800" height="600" frameborder="0" style="border:0"></iframe> </div> <div class="clear"></div> </div> <div class="box-contact"> <h3> consultas:</h3> <form id="contact-form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <div class="success"> Consulta Enviada! <strong>Pronto nos pondremos en contacto con usted, gracias.</strong> </div> <fieldset> <div class="coll-1"> <div> <div class="form-txt">su nombre:</div> <label class="name"> <input type="text" name="name"> <span class="error">*Esto no es un nombre valido.</span> <span class="empty">*Campo Requerido.</span> </label> <div class="clear"></div> </div> <div> <div class="form-txt">telefono:</div> <label class="phone"> <input type="tel" name="phone"> <span class="error">*Telefono no valido.</span> <span class="empty">*Campo Requerido.</span> </label> <div class="clear"></div> </div> <div> <div class="form-txt">Email:</div> <label class="email"> <input type="email" name="email"> <span class="error">*E-mail no valido.</span> <span class="empty">*Campo Requerido.</span> </label> <div class="clear"></div> </div> </div> <div class="coll-2"> <div> <div class="form-txt">mensaje:</div> <label class="message"> <textarea></textarea> <span class="error">*Mensaje demasiado corto.</span> <span class="empty">*Campo Requerido.</span> </label> <div class="clear"></div> </div> </div> <div class="clear"></div> <div class="btns"> <a class="btn" data-type="reset">limpiar</a> <a class="btn" data-type="submit" name="submit">enviar</a> </div> </fieldset> </form> </div> </section> <!--==============================footer=================================--> <footer> <div class="main"> <ul class="soc-list"> <li><a href="https://www.facebook.com/pages/Can-Pages/125408177631609?fref=tshttps://www.facebook.com/pages/Can-Pages/125408177631609?fref=ts"><img alt="" src="images/icon-1.png"></a></li> <li><a href="#"><img alt="" src="images/icon-2.png"></a></li> <li><a href="#"><img alt="" src="images/icon-3.png"></a></li> <li><a href="#"><img alt="" src="images/icon-4.png"></a></li> </ul> <div class="policy">TODOS LOS DERECHOS RESERVADOS DE <a href="http://www.templatemonster.com" rel="nofollow">www.restaurantCANPAGES.com</a></div> <div class="clear"></div> </div> </footer> </body> </html>
O

Vale, no me acordaba que la función mail() no funciona en un servidor local.

Create un hosting gratis y pruébalo allí.

Una buena opción es
www.hostinger.es/

1 respuesta
Namaris

#14 Las pruebas que estoy haciendo yo son en un hosting de pago, la funcion en sí trabaja bien, es este codigo el que no funciona correctamente como debería.

O

Prueba solo con esto en el archivo, así veras si es problema del form o del php

    $from = "prueba";
    $subject = "Restaurant Can Pages Web";
    $phone = "tel prueba";
    $header = "hola";
    $to = "[email protected]";
jalamoNNN

Lo único que se me ocurre es:

  • No tienes un servidor mail instalado
  • En caso de que lo tengas instalado y ejecutándose, revisa la configuración del servidor o que no tengas capado el puerto por el que salen los mails.
  • ¿Enviar el mail funciona pero te llega al spam de tu correo?
taltal

Prueba con phpmailer sino, a mi alguna vez con según que hosting me había pasado y con phpmailer me lo solucionaba. Además, con phpmailer siempre tienes la opción para enviar configurando el envió a través de un correo por smtp.

Usuarios habituales