【问题标题】:PHP mail form - email headerPHP 邮件表单 - 电子邮件标题
【发布时间】:2012-03-11 12:07:53
【问题描述】:

我在我的网站上使用 PHP 邮件表单。我收到邮件很好,但我收到的标题格式为a7849972@srv29.000webhost.com,回复地址也是如此。如何更改我的代码以在标题中获取此人的姓名?我正在使用以下代码:

<?php
if(isset($_POST['submit'])) {
   $to = 'chander_info@yahoo.com' ;     //put your email address on which you want to      receive the information
   $subject = 'Message - Contact Form Coast Med Spa';   //set the subject of email.
   $headers  = 'MIME-Version: 1.0' . "\r\n";
   $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
   $mailheader = "From: ".$_POST["FirstName"]."\r\n"; 
   $mailheader .= "Reply-To: ".$_POST["email"]."\r\n";
   $message = "<table>
           <tr><td>Title</td><td>".$_POST['Title']."</td></tr>
           <tr><td>First Name</td><td>".$_POST['FirstName']."</td></tr>
           <tr><td>Last Name</td><td>".$_POST['LastName']."</td></tr>
           <tr><td>E-Mail</td><td>".$_POST['Email']."</td></tr>
           <tr><td>Phone Number</td><td>".$_POST['HomePhone']."</td></tr>
           <tr><td>Comments</td><td>".$_POST['CAT_Custom_869']."</td></tr>
           <tr><td>Contact Method</td><td>".$_POST['CAT_Custom_868']."</td></tr>
           <tr><td>Subscribe to: eNewsletter</td>     <td>".$_POST['CampaignList_41798']."</td></tr>
           </table>" ;
   mail($to, $subject, $message, $headers, $mailheader);
   header('Location: http://coastlasercenter.com/html/message-contact.html');
echo "Your message has been received";
}
?>

【问题讨论】:

  • 你最好使用像PHPmailer这样的邮件类。内置的mail() 函数不符合当今的电子邮件标准,并且很难针对此类内容进行修改。

标签: php forms email header


【解决方案1】:

为什么要将标题分成两个不同的变量? 您将 From 和 Reply-to 标头作为附加参数传递给 mail() 函数。检查 PHP 的documentation。

试试这个:

<?php
if(isset($_POST['submit'])) {
   $to = 'chander_info@yahoo.com' ;     //put your email address on which you want to      receive the information
   $subject = 'Message - Contact Form Coast Med Spa';   //set the subject of email.
   $headers  = 'MIME-Version: 1.0' . "\r\n";
   $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
   $headers .= "From: ".$_POST['FirstName']." ".$_POST['LastName']." <".$_POST['Email'].">\r\n"; 
   $headers .= "Reply-To: ".$_POST["email"]."\r\n";
   $message = "<table>
           <tr><td>Title</td><td>".$_POST['Title']."</td></tr>
           <tr><td>First Name</td><td>".$_POST['FirstName']."</td></tr>
           <tr><td>Last Name</td><td>".$_POST['LastName']."</td></tr>
           <tr><td>E-Mail</td><td>".$_POST['Email']."</td></tr>
           <tr><td>Phone Number</td><td>".$_POST['HomePhone']."</td></tr>
           <tr><td>Comments</td><td>".$_POST['CAT_Custom_869']."</td></tr>
           <tr><td>Contact Method</td><td>".$_POST['CAT_Custom_868']."</td></tr>
           <tr><td>Subscribe to: eNewsletter</td>     <td>".$_POST['CampaignList_41798']."</td></tr>
           </table>" ;
   mail($to, $subject, $message, $headers);
   header('Location: http://coastlasercenter.com/html/message-contact.html');
echo "Your message has been received";
}
?>

顺便说一句,您应该考虑在将 $_POST 连接到您的电子邮件标题之前验证您在 $_POST 中获得的数据,因为它可能导致email injection attacks。

【讨论】:

  • 另一件事,查看您的其余代码:如果您将客户端重定向到另一个页面,他将无法看到您在发送 Location 标头后回显的内容。您应该在 message-contact.html 上显示您的消息
  • 是的回声我忘记删除它只是为了测试......我在contact-us.html文件中进行的验证
  • 我对您的脚本建议的更改对您有帮助吗?
  • 查看您收到的电子邮件的标题,其中可能有一些内容可以帮助您了解正在发生的事情。 000webhost 也有可能正在重写您的电子邮件标题。如果是这种情况,您的脚本将无能为力。你应该联系服务器管理员。
  • 事实上 000webhost 我只用于测试主站点coastmedspa.com,在他们的网络邮件上我也遇到了同样的问题,虽然发件人是 chander@rs19.abstractdns.com 在标题中
【解决方案2】:

在你的代码中使用类似这样的格式:

$headers .= "From: ".$userName." <".$userEmailAddress.">";

顺便说一句,您的字符集最好使用 utf-8 而不是 iso-8859-1。

【讨论】:

  • 我必须在 .$userName 和 .$userEmailAddress 中输入什么值。
  • $userName 必须是 $_POST["FirstName"] 并且 $userEmailAddress 必须是 $_POST["email"]
  • 万岁!非常感谢 Md. Saberi 和 Andrés Gattinoni 的帮助。即使我也添加了姓氏$headers .= "From: ".$_POST['FirstName']." ".$_POST['LastName']." &lt;".$_POST['Email']."&gt;";
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
  • 2012-09-17
相关资源
最近更新 更多