2010-02-09 50 views
2

我遇到了我创建的PHP联系表单的问题。当我在表单中输入信息并单击提交时,信息将发送到电子邮件地址,但没有附加到电子邮件的发件人地址。如何在PHP联系表单中设置“发件人”地址?

如何创建一个seneders地址,以便当用户点击sumbit时,它将发送电子邮件与他的电子邮件地址作为发件人。

我的表单的代码如下所示:

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

我很新的PHP,并感谢所有帮助我可以用这个搞定。

在此先感谢

+3

阅读有关邮件功能additional_headers的文档 – meouw 2010-02-09 13:49:19

回答

1

你应该做这样的事情:

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

该行开始$sanitizedEmail确保用户不能从您的形式发送垃圾短信。

8

您可以在邮件()调用作为第四个参数(目前你只添加了$ visitoremail。头需要由被分隔的“添加多个额外的头\ r \ n”。下面是来自PHP.net/manual如何做其他标头的摘录:

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

您可以添加‘从:’标头,当你为了设置发件人的地址调用mail()

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

您还可以追加“回复:”头,如果你想(或者你想包括报头的任何其他数),

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

另一种选择是设置从默认解决你的php.ini文件,或将其设置在这样的剧本,

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

PHP Manual page for mail()有更多的信息。

1

其他答案解释如何添加From头。如果您不仔细检查脚本输入,则存在一个重要的可能安全漏洞。你的表格可能变成一个垃圾邮件机器,可能会导致你的各种悲伤。

阅读上的电子邮件标题注射: http://www.damonkohler.com/2008/12/email-injection.html

验证电子邮件地址的电子邮件地址和消毒所有输入。

相关问题