【问题标题】:How do I set the "From" address in a PHP contact form?如何在 PHP 联系表单中设置“发件人”地址?
【发布时间】:2011-01-14 19:48:46
【问题描述】:

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

如何创建发件人地址,以便当用户单击 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("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>

我对 PHP 还是很陌生,如果我能获得所有帮助,我将不胜感激。

提前致谢

【问题讨论】:

  • 阅读有关邮件功能的附加标题的文档

标签: php email forms


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以在 mail() 调用中添加多个额外的标头作为第四个参数(目前您只添加 $visitoremail。标头需要用“\r\n”分隔。这是 PHP 的摘录。网络/手册如何做额外的标题:

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

    【讨论】:

      【解决方案3】:

      您可以在调用mail()时添加“发件人:”标头,以设置发件人的地址。

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

      如果需要,您还可以附加“Reply-To:”标题(或您想要包含的任何其他数量的标题),

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

      另一个选项是在你的 php.ini 文件中设置一个默认地址,或者像这样在脚本中设置它,

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

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

      【讨论】:

        【解决方案4】:

        你应该这样做:

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

        $sanitizedEmail 开头的行确保用户无法从您的表单发送垃圾邮件。

        【讨论】:

          【解决方案5】:

          其他答案解释了如何添加 From 标头。如果您不仔细检查脚本输入,则可能存在一个重要的安全漏洞。您的表单可能会变成垃圾邮件机器,给您带来各种痛苦。

          阅读电子邮件标头注入: http://www.damonkohler.com/2008/12/email-injection.html

          验证电子邮件地址是否为电子邮件地址并清理所有输入。

          【讨论】:

            【解决方案6】:

            看看 PHPMailer

            您几乎可以使用 PHPMailer 完成所有操作。单击此处访问该站点并获取副本

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

            PHPMailer 为您完成所有逻辑。

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-03-30
              • 1970-01-01
              • 2019-11-02
              • 2018-11-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多