2009-08-12 64 views
1

我正在构建一个简单的订单系统,并希望在提交表单后发送电子邮件。我的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("[email protected]", "Order", $message, $headers); 

这工作正常,除了在电子邮件,我得到$物品1串在一开始的价值主体,前“发...留言” - 只是就像我将它添加到$消息(我没有看到的那样)。

回答

6

如果你有这样的:

$headers = "From: $email\r\n" . 

你想这个代替:

$headers = "From: $email\r\n"; 

否则,你不管串联在下一行(这恰好是定义$item1)来到$headers的末尾。虽然这在技术上并不有效(即内容是消息标题的一部分,而不是正文),但大多数电子邮件客户端无论如何都会有效地耸耸肩并展示它。

+0

+1我敢打赌你就是这样。 – karim79 2009-08-12 12:11:30

+1

谢谢,这对我来说很愚蠢。 – 2009-08-12 12:14:45

1

请在开始制作之前,为您的POST变量添加一些消毒。

让我们在这里看到:

$email=$_POST["orderEmail"]; 
$headers = "From: $email\r\n"; 
mail("[email protected]", "Order", $message, $headers); 

其中"orderEmail"包含我可以发送POST请求:

"[email protected]\r\n 
From: [email protected]\r\n 
BCC: [email protected], [email protected]" 

等和你无害的形式将工作非常适合我发送垃圾邮件到整个世界。 This site suggects:

if (ereg("[\r\n]", $name) || ereg("[\r\n]", $email)) { 
    [... direct user to an error page and quit ...] 
} 
+0

我会这样做,感谢您的警告! – 2009-08-12 15:18:56