格式化电子邮件,如表单

时间:2013-08-08 15:40:13

标签: php forms

我已经设置了一个在线订单,并将表格输出通过电子邮件发送到我妻子的收件箱。但是,目前所有的值都以列表格式出现,而她很难遵循。

  

以下是我们的网上订单:

的订单
            Name: 
         Address: 
           Phone: 
           Email: 
     Book Number: 
    Page Number1: 
 Product Number1: 
        Product1: 
            QTY1: 
     Unit Price1: 
    Total Price1: 
    Page Number2: 
 Product Number2: 
        Product2: 
            QTY2: 
     Unit Price2: 
    Total Price2: 
    Page Number3: 
 Product Number3: 
        Product3: 
            QTY3: 
     Unit Price3: 
    Total Price3:

我想将电子邮件格式化为类似于网站上的输入表单。我一直试图逆向设计其他人的例子而没有运气。我会包含表格的快照,但我的声誉不够高。本质上,它是一个包含与我需要收集的数据相对应的表单字段的表(想想订单表单)。下面是提交给它的PHP代码示例。

<?php 
 $from = $_REQUEST['Email'] ; 
 $to = "myemailaddress@gmail.com";
 $name = $_REQUEST['Name'] ; 
 $headers = "From: $from"; 
 $subject = "Online Order Submission"; 

 $fields = array(); 
 $fields{"Name"} = "Name"; 
 $fields{"Address"} = "Address"; 
 $fields{"Phone"} = "Phone"; 
 $fields{"Email"} = "Email"; 
 $fields{"Item1Page"} = "Page Number1"; 
 $fields{"Number1"} = "Product Number1"; 
 $fields{"Product1"} = "Product1"; 
 $fields{"QTY1"} = "QTY1";
 $fields{"Uprice1"} = "Unit Price1"; 
 $fields{"Tprice1"} = "Total Price1"; 
 $fields{"Item2Page"} = "Page Number2"; 
 $fields{"Number2"} = "Product Number2"; 
 $fields{"Product2"} = "Product2"; 
 $fields{"QTY2"} = "QTY2";
 $fields{"Uprice2"} = "Unit Price2"; 
 $fields{"Tprice2"} = "Total Price2"; 

// Variables removed for clarity 

 $fields{"Item11Page"} = "Page Number11"; 
 $fields{"Number11"} = "Product Number11"; 
 $fields{"Product11"} = "Product11"; 
 $fields{"QTY11"} = "QTY11";
 $fields{"Uprice11"} = "Unit Price11"; 
 $fields{"Tprice11"} = "Total Price11"; 

 $body = "The following is an order from our Web Order Form:\n\n"; foreach($fields as $a => $b){    
 $body .= sprintf("%20s: %s\n",$b,$_REQUEST[$a]); } 

 $headers2 = "From: myemailaddress@gmail.com"; 
 $subject2 = "Thank you for your order"; 
 $autoreply = "Thank you for your order. We will contact you when your order is ready for delivery.";

 if($from == '') {print "You have not entered an email, please go back and try again";} 
 else { 
 if($name == '') {print "You have not entered a name, please go back and try again";} 
 else { 
 $send = mail($to, $subject, $body, $headers); 
 $send2 = mail($from, $subject2, $autoreply, $headers2); 
 if($send) 
 {header( "Location: http://www.website.com/thankyou.html" );} 
 else 
 {print "We encountered an error sending your mail, please try again later."; } 
 }
}
 ?> 

任何帮助将不胜感激


更新

我已经尝试了下面提到的一些参考文献和修正案。当前的编辑如下所示:

<?php 
$from = $_REQUEST['Email'] ; 
$to = "myemailaddress@live.com";
$Name = $_REQUEST['Name'] ; 
$headers = "From: $from"; 
$headers .= "Content-type: text/html\r\n";
$subject = "Order Submission TEST"; 
$message = "<html><body><br><br>The following is an order from our TEST Order Form<br><br><br>";
$message .= "<table>";
$message .= "<tr><td>Name: </td><td>" . strip_tags($_POST['Name']) . "</td></tr>";
$message .= "<tr><td>Address: </td><td>" . strip_tags($_POST['Address']) . "</td></tr>";
$message .= "<tr><td>Phone No: </td><td>" . strip_tags($_POST['Phone']) . "</td></tr>";
$message .= "<tr><td>E-mail: </td><td>" . strip_tags($_POST['Email']) . "</td></tr>";
$message .= "</table>";
$message .= "<table border=1><tr><td>Page No.</td><td>Product No.</td><td>Product Name</td><td>QTY</td><td>Unit Price</td><td>Total Price</td></tr>";
$message .= "<tr><td>" . strip_tags($_POST['Item1Page']) . "</td><td>" . strip_tags($_POST['Number1']) . "</td><td>" . strip_tags($_POST['Product1']) . "</td><td>" . strip_tags($_POST['QTY1']) . "</td><td>" . strip_tags($_POST['Uprice1']) . "</td><td>" . strip_tags($_POST['Tprice1']) . "</td></tr>";
$message .= "<tr><td>" . strip_tags($_POST['Item2Page']) . "</td><td>" . strip_tags($_POST['Number2']) . "</td><td>" . strip_tags($_POST['Product2']) . "</td><td>" . strip_tags($_POST['QTY2']) . "</td><td>" . strip_tags($_POST['Uprice2']) . "</td><td>" . strip_tags($_POST['Tprice2']) . "</td></tr>";
$message .= "<tr><td>" . strip_tags($_POST['Item3Page']) . "</td><td>" . strip_tags($_POST['Number3']) . "</td><td>" . strip_tags($_POST['Product3']) . "</td><td>" . strip_tags($_POST['QTY3']) . "</td><td>" . strip_tags($_POST['Uprice3']) . "</td><td>" . strip_tags($_POST['Tprice3']) . "</td></tr>";
$message .= "<tr><td>" . strip_tags($_POST['Item4Page']) . "</td><td>" . strip_tags($_POST['Number4']) . "</td><td>" . strip_tags($_POST['Product4']) . "</td><td>" . strip_tags($_POST['QTY4']) . "</td><td>" . strip_tags($_POST['Uprice4']) . "</td><td>" . strip_tags($_POST['Tprice4']) . "</td></tr>";
$message .= "<tr><td>" . strip_tags($_POST['Item5Page']) . "</td><td>" . strip_tags($_POST['Number5']) . "</td><td>" . strip_tags($_POST['Product5']) . "</td><td>" . strip_tags($_POST['QTY5']) . "</td><td>" . strip_tags($_POST['Uprice5']) . "</td><td>" . strip_tags($_POST['Tprice5']) . "</td></tr>";
$message .= "<tr><td>" . strip_tags($_POST['Item6Page']) . "</td><td>" . strip_tags($_POST['Number6']) . "</td><td>" . strip_tags($_POST['Product6']) . "</td><td>" . strip_tags($_POST['QTY6']) . "</td><td>" . strip_tags($_POST['Uprice6']) . "</td><td>" . strip_tags($_POST['Tprice6']) . "</td></tr>";
$message .= "<tr><td>" . strip_tags($_POST['Item7Page']) . "</td><td>" . strip_tags($_POST['Number7']) . "</td><td>" . strip_tags($_POST['Product7']) . "</td><td>" . strip_tags($_POST['QTY7']) . "</td><td>" . strip_tags($_POST['Uprice7']) . "</td><td>" . strip_tags($_POST['Tprice7']) . "</td></tr>";
$message .= "<tr><td>" . strip_tags($_POST['Item8Page']) . "</td><td>" . strip_tags($_POST['Number8']) . "</td><td>" . strip_tags($_POST['Product8']) . "</td><td>" . strip_tags($_POST['QTY8']) . "</td><td>" . strip_tags($_POST['Uprice8']) . "</td><td>" . strip_tags($_POST['Tprice8']) . "</td></tr>";
$message .= "<tr><td>" . strip_tags($_POST['Item9Page']) . "</td><td>" . strip_tags($_POST['Number9']) . "</td><td>" . strip_tags($_POST['Product9']) . "</td><td>" . strip_tags($_POST['QTY9']) . "</td><td>" . strip_tags($_POST['Uprice9']) . "</td><td>" . strip_tags($_POST['Tprice9']) . "</td></tr>";
$message .= "<tr><td>" . strip_tags($_POST['Item10Page']) . "</td><td>" . strip_tags($_POST['Number10']) . "</td><td>" . strip_tags($_POST['Product10']) . "</td><td>" . strip_tags($_POST['QTY10']) . "</td><td>" . strip_tags($_POST['Uprice10']) . "</td><td>" . strip_tags($_POST['Tprice10']) . "</td></tr>";
$message .= "<tr><td>" . strip_tags($_POST['Item11Page']) . "</td><td>" . strip_tags($_POST['Number11']) . "</td><td>" . strip_tags($_POST['Product11']) . "</td><td>" . strip_tags($_POST['QTY11']) . "</td><td>" . strip_tags($_POST['Uprice11']) . "</td><td>" . strip_tags($_POST['Tprice11']) . "</td></tr>";
$message .= "<tr><td colspan=5 align=right>Order Processing Charge </td><td align=right>$2.50</td></tr>";
$message .= "<tr><td colspan=5 align=right>Order TOTAL </td><td align=right></td></tr>";
$message .= "</table></body></html>";
$headers2 = "From: myemailaddress@live.com "; 
$subject2 = "Thank you for your order "; 
$autoreply = "Thank you for your order. We will contact you when your order is ready for delivery. ";
$send = mail($to,$subject,$message,$headers); 
$send2 = mail($from,$subject2,$autoreply,$headers2); 
if($send) 
{header( "Location: thankyou.html" );} 
else 
{print "We encountered an error sending your mail, please try again later."; } 
?> 

我借用了许多想法,这个化身已经删除了数组,转而将变量直接注入表中。 $ send2行正常工作,因为收到了“谢谢您的订单”电子邮件,并且重定向到thankyou.html也可以。但是,没有收到包含该订单的电子邮件。

3 个答案:

答案 0 :(得分:0)

您可以在电子邮件中添加HTML标记,只要您在其中加入一些标题即可。这可以让您将表单放入电子邮件中。见here

答案 1 :(得分:0)

您需要使用HTML 标记您的电子邮件正文。

由于这是一封电子邮件,我建议您使用<table>s来构建表单。

我看到你正在访问像$fields{"Name"}这样的php数组。将其转换为$fields['name'],就像您在顶部所做的那样。使用小写的键名来提高可读性,使用'而不是"来提高性能。您可以阅读有关此here的更多信息。

关于结构,请参阅此示例(样式属性是内联样式的示例)

<html>
<body>
<table width="600" style="border:1px solid #333">
  <tr>
    <td align="center"><!-- head --></td>
  </tr>
  <Tr>
    <td align="center">
      <!-- email body -->

      <table align="center" width="300" border="0" cellspacing="0" cellpadding="0" style="border:1px solid #ccc;">
        <tr>
          <td><!-- key --></td>
          <td><!-- value --></td>
        </tr>
      </table></td>
  </tr>
</table>
</body>
</html>

注意:仅使用电子邮件html中的内联样式,因为大多数电子邮件阅读器都无法正确解析外部css。详细了解电子邮件和表格herehere

要发送我推荐的电子邮件,请开始使用SwiftMailer。这是一个PHP邮件类,可以轻松地发送带有php的邮件,并为附件等提供方便的功能。要实现它,您需要一些高级知识,但docs会帮助您。

祝你好运!

答案 2 :(得分:0)

如果您需要右对齐标签,那么您可以在生成邮件正文时使用PHP填充字符串。

循环变量,并使用str_pad函数:

<?php
foreach ($orderDetails as $key => $value) {
    $body.= str_pad($key, 20) . ': ' . $value;
}

您仍然可以以纯文本形式发送电子邮件,而不必使用HTML。