2012-02-02 30 views
5

Hola soy un novato en PHP y estoy siguiendo este tutorialEnviar correo electrónico php del formulario de contacto

http://tutorialpot.com/2011/06/fancy-contact-form-with-inline-validation/#comment-1771

me pregunto ¿Dónde pongo en mi dirección de correo electrónico para que los usuarios pueden enviar un correo electrónico a mí

gracias de antemano

<?php 
function checkLen($str,$len=2) //&len definens the minimun length of the input fields 
{ 
    return isset($_POST[$str]) && mb_strlen(strip_tags($_POST[$str]),"utf-8") > $len; 
} 
function checkEmail($str) 
{ 
    return preg_match("/^[\.A-z0-9_\-\+]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/", $str); 
} 
foreach($_POST as $k=>$v) 
{ 
$_POST[$k]=stripslashes($_POST[$k]); 

$_POST[$k]=htmlspecialchars(strip_tags($_POST[$k])); 
} 
//session names must be same with that in contact form  
session_name("tpot_contact"); 
@session_start(); 
if (isset($_POST['send'])){ 
$err = array(); 
if(!checkLen('name')) 
    $err[]='The name field is too short or empty!'; 
if(!checkLen('email')) 
    $err[]='The email field is too short or empty!'; 
else if(!checkEmail($_POST['email'])) 
    $err[]='Your email is not valid!'; 
if(!checkLen('subject')) 
    $err[]='You have not selected a subject!'; 
if(!checkLen('message')) 
    $err[]='The message field is too short or empty!'; 
if((int)$_POST['captcha'] != $_SESSION['expected']) 
    $err[]='Wrong security code!'; 
if(count($err)) 
{ 
     $_SESSION['errStr'] = implode('<br />',$err); 
     header('Location: '.$_SERVER['HTTP_REFERER']); 
     exit(); 
    } 
    //submission data 
     $IP=$_SERVER['REMOTE_ADDR']; 
     $name=$_POST['name']; 
     $email=$_POST['email']; 
     $date=(gmdate(" Y/m/d ")); 
     $time = date('H:i:s'); 
     $message=$_POST['message']; 
      $from="[email protected]"; 
      $subject = " from ".$_POST['name']." | contact form"; 
      $headers = "From: ".$from."\r\n"; 
      $headers .= "Reply-to: ".$from."\r\n"; 
      $headers = 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
      //checks whether send to my email address is set 
      if ($cc == 1) { 
      $headers .= 'Cc:'. $_POST['email']."\r\n"; 
          } 
     $msg = 
      "<p><strong>Name: </strong>" .$name. "</p> 
      <p><strong>Email Address: </strong>" .$email. "</p> 
      <p><strong>Enquiry: </strong>" .$_POST['subject']. "</p> 
      <p><strong>Message: </strong>" .$message. "</p> 
      <br/> <br/> 
      <p>This message was sent from the IP Address:" .$ipaddress." on".$date. "at".$time."</p>"; 
      if(@mail($email, $subject, $msg, $headers)) 
      { 
     $success=array(); 
     $success[]='Your message has been sent! | Thank you'; 
     $_SESSION['sent'] = implode('<br />',$success); 
     header('Location: '.$_SERVER['HTTP_REFERER']); 
     exit(); 
      } 
    else{ 
    $err[]='your message could not be sent due to a network problem please try again.!'; 
    $_SESSION['errStr'] = implode('<br />',$err); 
    header('Location: '.$_SERVER['HTTP_REFERER']); 
    exit(); 
    } 
} 
?> 

    <div class="fieldContainer"> 
    <label for="name" >*Name: </label> 
    <input class="validate[required,minSize[3]] input1" id="name" name="name" type="text" autofocus="autofocus" placeholder="NAME"/><br /><br /> 
    <label for="email">*Email</label> 
    <input class="validate[required,custom[email]] input1" id="email" name="email" type="text" placeholder="EMAIL" /><br /><br /> 
     <label for="subect" >*Subject</label> 
     <select id="dropdown4" name="subject" class="validate[required] input1"> 
     <option selected="selected" value="">--Choose--</option> 
     <option value="Quote">Quote</option> 
     <option value="Suggestion">Suggestion</option> 
     <option value="Question">Question</option> 
     <option value="Business Proposal">Business Proposal </option> 
     <option value="Advertising">Advertising</option> 
     <option value="Complaint">Complaint</option> 
     <option value="Other">Other</option> 
     </select><br /><br /> 
    <label for="message" >*Message</label> 
    <textarea rows="10" cols="15" name="message" class="validate[required,minSize[3],maxSize[300]] input1" id="message" placeholder=" MESSAGE CONTENTS"></textarea><br /><br /> 

     <legend>*Human Verification (HELP US FIGHT SPAM)</legend> 
     <label for="captcha">25+9=</label> 
    <input type="text" class="validate[required,custom[integer]] input1 " name="captcha" id="captcha" maxlength="2" placeholder="DO A LITTLE MATH" /> 
<p> 
     <input type='checkbox' id='cc' name='cc' value='1' /> 
     Send a copy to your email address 
     </p> 
    </div> 
    <div class="signupButton"> 
<input name="send" type="submit" class="btnsubmit" id="btnsubmit" /> 
    <!--<input class="blackb" type="submit" name="send" id="submit"/>--> 
    </div> 

</form> 
+0

Para el envío real del correo electrónico, le recomiendo que eche un vistazo a http://swiftmailer.org. – Svish

Respuesta

2

es esta sección que envía el mensaje como correo devuelve bool. Los primeros parametros es la de la dirección (ver enlace)

if(@mail($email, $subject, $msg, $headers)) 

http://php.net/manual/en/function.mail.php

En el ejemplo, el correo electrónico se destinará a la dirección el usuario introduce según lo visto como $email se rellena con el valor publicado

$email=$_POST['email']; 

pero puedes codificarlo como quieras.

if(@mail('[email protected]', $subject, $msg, $headers)) 
+1

Además, declara la variable en esta línea: '$ email = $ _ POST ['email'];' para que pueda agregarla también allí. –

+0

¿acabo de cambiar el correo electrónico a mi dirección de correo electrónico? $ email = $ _ POST ['myemailaddress ???????????']; –

+0

@JeremyMiller No debería estar haciendo eso ya que '$ email' se usa en el cuerpo del mensaje para informarle sobre la dirección de correo electrónico del remitente. Debería reemplazar la variable en la función 'mail' en la línea 62. – MMM

3

Este tutorial parece tener algunos errores (al menos a primera vista).

Utiliza $cc sin embargo, esta variable no está definida en ninguna parte.

Envía el mensaje a $email, pero $email = $_POST['email'] (línea 42) por lo que envía ese correo electrónico a la dirección de correo electrónico proporcionada en el formulario (?). Quiere fijar la línea 62 con:

if(@mail('[email protected]', $subject, $msg, $headers)) 

Tampoco se sanitización las entradas para que pueda inyectar cabeceras en el mensaje de correo electrónico. Más explicado here.

Por último, si la funcionalidad CC se implementó correctamente (es decir, se definió $cc), enviaría una copia del correo electrónico al remitente (CC) revelando así su dirección de correo electrónico (no es bueno si quiere evitar el spam). Debe enviar un correo electrónico por separado al remitente.

Cuestiones relacionadas