2010-02-09 5 views
2

J'ai un problème avec le formulaire de contact PHP que j'ai créé. Lorsque j'entre des informations dans le formulaire et que je clique sur Envoyer, les informations sont envoyées à une adresse e-mail, mais aucune adresse d'expéditeur n'est jointe à l'e-mail.Comment définir l'adresse "De" dans un formulaire de contact PHP?

Comment est-ce que je crée une adresse de Seneders de sorte que quand l'utilisateur clique sur le sumbit il enverra l'email avec leur email address en tant qu'expéditeur.

Le code de ma forme est présentée ci-dessous:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Email Form </title> 
</head> 
<body> 

<form method="post" action="sendeail.php"> 

<?php 
$ipi = getenv("REMOTE_ADDR"); 
$httprefi = getenv ("HTTP_REFERER"); 
$httpagenti = getenv ("HTTP_USER_AGENT"); 
?> 

<input type="hidden" name="ip" value="<?php echo $ipi ?>" /> 
<input type="hidden" name="httpref" value="<?php echo $httprefi ?>" /> 
<input type="hidden" name="httpagent" value="<?php echo $httpagenti ?>" /> 


---------------(Sending Scripit below)----------------------------- 

Name: <br /> 
<input type="text" name="visitor" size="35" /> 
<br /> 
Address:<br /> 
<input type="text" name="visitoradd" size="35" /> 
<br /> 

City<br /> 
<input type="text" name="visitorcity" size="35" /> 
<br /> 

Postcode<br /> 
<input type="text" name="visitorpost" size="35" /> 
<br /> 

Email:<br /> 
<input type="text" name="visitormail" size="35" /> 
<br /> 

Telephone Number:<br /> 
<input type="text" name="visitortel" size="35" /> 
<br /> 
Bookkeeping/Payroll :<br /> 
<select name="bp" size="1"> 
<option value=" Bookkeeping">Bookkeeping </option> 
<option value=" Payroll ">Payroll</option> 
</select> 
<br /> 
<br /> 
Number of transactions : <br /> 
<input type="text" name="transcations" size="35" /> 
<br /> 
Number of employees <br /> 
<input type="text" name="employees" size="35" /> 
<br /> 
<br /> 
Payroll weekly/monthly:<br /> 
<select name="pmw" size="1"> 
<option value=" Weekly">Weekly</option> 
<option value=" Monthly">Monthly</option> 
</select> 
<br /> 
<br /> 
<input type="submit" value="Submit" /> 
<br /> 
</form> 
</body> 
</html> 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Sendemail Script</title> 
</head> 
<body> 
<?php 

$visitor = $_POST['visitor']; 
$visitoradd = $_POST['visitoradd']; 
$visitorcity= $_POST['visitorcity']; 
$visitorpost= $_POST['visitorpost']; 
$visitormail = $_POST['visitormail']; 
$visitortel = $_POST['visitortel']; 
$bp = $_POST['bp']; 
$transcations = $_POST['transcations']; 
$employees = $_POST['employees']; 
$pmw = $_POST['pmw']; 


if(!$visitormail == "" && (!strstr($visitormail,"@") || !strstr($visitormail,"."))) 
{ 
echo "<h2>Use Back - Enter valid e-mail</h2>\n"; 
$badinput = "<h2>Information was NOT submitted</h2>\n"; 
echo $badinput; 
die ("Go back! ! "); 
} 

if(empty($visitor) || empty($visitormail) || empty($visitorcity) || empty($visitorpost) || empty($visitoradd) || empty($visitortel) || empty($bp) || empty($transcations) || empty($employees) || empty($pmw) || empty($pmw)) 
{ 
echo "<h2>Use Back - fill in all fields</h2>\n"; 
die ("Use back! ! "); 
} 

$message = " 
Name: $visitor\n 
Address: $visitoradd\n 
City: $visitorcity\n 
Post Code: $visitorpost\n 
Email: $visitormail\n 
Phone Number: $visitortel\n 
Bookkeeping/Payroll: $bp\n 
Number of Transactions: $transcations\n 
Number Of Employees: $employees\n 
Payroll Weekly/Monthly: $pmw\n" 
; 

$subject = "Payment Details"; 

mail("[email protected]",$subject,$message,$visitormail); 

?> 

<p align="center"> 
<br /> 
Thank You : <?php echo $visitor ?> (<?php echo $visitormail ?>) 
<br /> 

<br /> 
<a href="contact3.php">Click here to Finish</a> 
</p> 

</body> 
</html> 

Je suis tout à fait nouveau pour PHP et apprécierait toute l'aide que je peux obtenir avec cela.

Merci à l'avance

+3

Lisez les documents à propos de additional_headers pour la fonction mail – meouw

Répondre

1

Vous devriez faire quelque chose comme ceci:

$sanitizedEmail = filter_var($visitormail, FILTER_SANITIZE_EMAIL); 
mail('[email protected]', $subject, $message, 'From: ' . $sanitizedEmail); 

La ligne commençant $sanitizedEmail garantit qu'un utilisateur ne peut pas envoyer des messages de spam de votre formulaire.

8

Vous pouvez ajouter plusieurs en-têtes supplémentaires dans le courrier() appel comme le quatrième argument (actuellement vous ajoutez seulement le visitoremail de $. Headers être délimité par un " \ r \ n ». Voici un extrait du PHP.net/manual sur la façon de faire des en-têtes supplémentaires:

// Additional headers 
$headers .= 'To: Mary <[email protected]>, Kelly <[email protected]>' . "\r\n"; 
$headers .= 'From: Birthday Reminder <[email protected]>' . "\r\n"; 
$headers .= 'Cc: [email protected]' . "\r\n"; 
$headers .= 'Bcc: [email protected]' . "\r\n"; 

// Mail it 
mail($to, $subject, $message, $headers); 
2

vous pouvez ajouter le « From: » lorsque vous appelez mail() afin de définir l'adresse de l'expéditeur

$headers = "From: ".$visitor."<".$visitormail.">\r\n";  
mail("[email protected]", $subject, $message, $headers); 

Vous pouvez également ajouter le « Reply-To: » En-tête si vous voulez (ou tout autre nombre de têtes que vous voulez inclure),

$headers .= "Reply-To: ".$visitor."<".$visitormail.">\r\n"; 

L'autre option est de définir une valeur par défaut de adresse dans votre fichier php.ini, ou le mettre dans le script comme celui-ci,

ini_set(sendmail_from, "[email protected]_here.com"); 

le PHP Manual page for mail() a plus d'informations.

1

D'autres réponses expliquent comment ajouter l'en-tête De. Il existe une vulnérabilité de sécurité importante si vous ne vérifiez pas soigneusement l'entrée de script. Votre formulaire peut être transformé en une machine à spam qui peut vous causer toutes sortes de deuils.

Lire sur l'injection d'en-tête de courrier électronique: http://www.damonkohler.com/2008/12/email-injection.html

Vérifiez que l'adresse e-mail est une adresse e-mail et désinfectez toutes les entrées.

Questions connexes