我正在构建一个简单的订单系统,并希望在提交表单后发送电子邮件。我的PHP代码看起来与此类似:
$name=$_POST["orderName"];
$company=$_POST["orderCompany"];
$email=$_POST["orderEmail"];
$phone=$_POST["orderPhone"];
$headers = "From: $email\r\n" .
$item1=$_POST["orderItem1"];
$qty1=$_POST["orderQty1"];
$item2=$_POST["orderItem2"];
$qty2=$_POST["orderQty2"];
$item3=$_POST["orderItem3"];
$qty3=$_POST["orderQty3"];
$date = date("l, F j Y, G:i") ;
$message="Message sent: $date \n\n
Name: $name\n
Company: $company\n
Email: $email\n
Phone: $phone\n\n
Order:\n
$item1 \tx$qty1\n
$item2 \tx$qty2\n
$item3 \tx$qty3\n";
mail("sales@company.com", "Order", $message, $headers);
工作正常,除了在电子邮件正文中我在“消息已发送...”之前获得$ item1字符串的值 - 就像我将其添加到$ message(我不喜欢)就我所知,我已经知道了。
答案 0 :(得分:6)
你有这个:
$headers = "From: $email\r\n" .
你想要这个:
$headers = "From: $email\r\n";
否则,您将连接下一行(恰好是$item1
的定义)的任何内容连接到$headers
的末尾。虽然这在技术上并不有效(即内容是邮件标题的一部分而不是正文),但大多数电子邮件客户端无论如何都会有效地耸耸肩并展示它。
答案 1 :(得分:1)
请在生产中使用之前,请为POST变量添加一些消毒功能。
我们在这里看到:
$email=$_POST["orderEmail"];
$headers = "From: $email\r\n";
mail("sales@company.com", "Order", $message, $headers);
我可以发送"orderEmail"
包含的POST请求:
"helo@helo.lv\r\n
From: viagra@farmacety.net\r\n
BCC: victim1@domain1.com, victom2@domain3.com"
等。而且你的无害形式对我向全世界发送垃圾邮件非常有用。 This site建议:
if ( ereg( "[\r\n]", $name ) || ereg( "[\r\n]", $email ) ) {
[... direct user to an error page and quit ...]
}