2012-02-02 18 views
5

Cześć Jestem newbie do PHP i jestem po tym kursieWyślij email php z formularza kontaktowego

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

zastanawiam się gdzie mam umieścić na mój adres e-mail, dzięki czemu użytkownicy mogą wysyłać e-mail do mnie

góry dzięki

<?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

Do faktycznego wysłania e-maila polecam zapoznać się z http://swiftmailer.org. – Svish

Odpowiedz

2

jest to sekcja, która wysyła wiadomość jako poczta zwraca bool. Pierwsze paramters jest do rozwiązania (patrz link)

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

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

W przykładzie e-mail trafi do adresu użytkownik wprowadza widziany jako $email jest wypełniana oddelegowanego wartości

$email=$_POST['email']; 

ale możesz kodować na dowolne urządzenie.

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

Dodatkowo, zadeklaruj zmienną w tym wierszu: '$ email = $ _ POST ['email'];' dzięki czemu możesz go tam również dodać. –

+0

czy wystarczy zmienić adres e-mail na mój adres e-mail? $ email = $ _ POST ['myemailaddress ???????????']; –

+0

@JeremyMiller Nie powinien tego robić, ponieważ '$ email' jest następnie używany w treści wiadomości, aby poinformować go o adresie e-mail nadawcy. Powinien zastąpić zmienną w funkcji 'mail' na linii 62. – MMM

3

Ten samouczek wydaje się mieć kilka błędów (przynajmniej na pierwszy rzut oka).

Używa ona $cc jednak ta zmienna nie jest nigdzie zdefiniowana.

Wysyła wiadomość pod numer $email, ale $email = $_POST['email'] (wiersz 42), aby wysłać ten e-mail na adres e-mail podany w formularzu (?). Chcesz naprawić linię 62 z:

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

Jest również nie odkażania wejść więc można wstrzykiwać do nagłówków wiadomości e-mail. Więcej wyjaśnił here.

Na koniec, jeśli funkcja CC została poprawnie wdrożona (tj. Zdefiniowano $cc), wysłałabyś kopię wiadomości e-mail do nadawcy (CC), ujawniając w ten sposób twój adres e-mail (nie jest dobry, jeśli chcesz unikaj spamu). Powinieneś wysłać osobny e-mail do nadawcy.

Powiązane problemy