简体   繁体   English

如何在PHP联系表单中设置“发件人”地址?

[英]How do I set the “From” address in a PHP contact form?

I have a problem with the PHP contact form I have created. 我有一个我创建的PHP联系表单的问题。 When I enter information into the form and click submit the information is sent to an email address but there is no senders address attached to the email. 当我在表单中输入信息并单击“提交”时,信息将发送到电子邮件地址,但电子邮件中没有附加发件人地址。

How do I create a seneders address so that when the user clicks sumbit it will send the email with thier email address as the sender. 如何创建seneders地址,以便当用户单击sumbit时,它将发送电子邮件,其电子邮件地址为发件人。

The code for my form is shown below: 我的表单代码如下所示:

<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("sd07sb@leeds.ac.uk",$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>

I am quite new to PHP and would appreciate all the help I can get with this. 我是PHP的新手,非常感谢我能得到的所有帮助。

Thanks in advance 提前致谢

You can add multiple extra headers in the mail() call as the fourth argument (currently you are only adding the $visitoremail. headers need to be delimited by a "\\r\\n". Here's an excerpt from the PHP.net/manual on how to do additional headers: 您可以在mail()调用中添加多个额外标头作为第四个参数(目前您只添加$ visitoremail。标头需要用“\\ r \\ n”分隔。这是PHP.net / manual的摘录关于如何做额外的标题:

// Additional headers
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

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

mail("sd07sb@leeds.ac.uk",$subject,$message, 'From: ' . $visitormail);

You can add the "From:" header when you call mail() in order to set the sender's address. 您可以在调用mail()时添加“发件人:”标题,以便设置发件人的地址。

$headers = "From: ".$visitor."<".$visitormail.">\r\n";    
mail("sd07sb@leeds.ac.uk", $subject, $message, $headers);

You could also append the "Reply-To:" header if you want (or any other number of headers you want to include), 如果需要,您还可以附加“Reply-To:”标题(或者您想要包含的任何其他数量的标题),

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

The other option is to set a default from address in your php.ini file, or set it in the script like this, 另一个选项是在php.ini文件中设置地址的默认值,或者在脚本中设置如下,

ini_set(sendmail_from, "your_from@address_here.com"); 

The PHP Manual page for mail() has more information. mail()PHP手册页面提供了更多信息。

You should do something like this: 你应该做这样的事情:

$sanitizedEmail = filter_var($visitormail, FILTER_SANITIZE_EMAIL);
mail('recipient@email.com', $subject, $message, 'From: ' . $sanitizedEmail);

The line beginning $sanitizedEmail ensures that a user cannot send spam messages from your form. $sanitizedEmail开始的行确保用户无法从您的表单发送垃圾邮件。

Other answers explain how to add the From header. 其他答案解释了如何添加From标头。 There is an important possible security vulnerability if you do not carefully check the script input. 如果不仔细检查脚本输入,则存在一个重要的安全漏洞。 Your form can be turned into a spam machine that can cause you all sorts of grief. 您的表单可能会变成垃圾邮件机器,可能会导致各种各样的悲伤。

Read up on email header injection: http://www.damonkohler.com/2008/12/email-injection.html 阅读电子邮件标题注入: http//www.damonkohler.com/2008/12/email-injection.html

Verify that the email address is an email address and sanitize all input. 验证电子邮件地址是否为电子邮件地址并清理所有输入。

Have a look at PHPMailer 看看PHPMailer

You can do almost everything using PHPMailer. 你可以使用PHPMailer做几乎所有事情。 Click here to visit the site and to obtain a copy 点击此处访问该网站并获取副本

http://phpmailer.worxware.com/index.php?pg=phpmailer http://phpmailer.worxware.com/index.php?pg=phpmailer

PHPMailer does all the logic for you. PHPMailer为您完成所有逻辑。

Eg. 例如。 $mailer->addAddress('sd07sb@leeds.ac.uk'); $ mailer-> addAddress('sd07sb@leeds.ac.uk');

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM