![](/img/trans.png)
[英]Laravel send mail to multiple recipients with the “Name” of recipient
[英]Send mail to multiple recipient
我已经研究过使用mail()发送到多个收件人的邮件,但是我无法使其正常工作。 我想做的是,对于我拥有的每个订单,订单1,2,3,每个都有自己的电子邮件地址,当我将其订单状态从待定更改为确认时,mail()将使用该ID来引用db表并发送这3个订单的电子邮件。 但就我而言,它只邮寄了最新的订单,即订单3。这是我用来更改订单状态的表格。
<form action="results-action" method="post" enctype="multipart/form-data">
<fieldset>
<table id ="table_id" class="display">
<thead>
<tr><td><h2>Pending Order</h2></td></tr>
<tr>
<th scope="col">Order ID</th>
<th scope="col"> </th>
<th scope="col">Name</th>
<th scope="col">Address</th>
<th scope="col">Product Name</th>
<th scope="col">Produt Quantity</th>
<th scope="col">Price</th>
<th scope="col">Order status</th>
</tr>
</thead>
<tbody>
<?php
while ($row = mysqli_fetch_array($result)) {
?>
<tr>
<td><input type="text" value='<?=$row['virtuemart_order_id']?>' name="orderid" id="virtuemart_order_id"></td>
<td><input type="hidden" value='<?=$row['virtuemart_product_id']?>' name="productid" id="virtuemart_product_id"></td>
<td><?=$row['first_name']?></td>
<td><?=$row['address_1']?></td>
<td><?=$row['order_item_name']?></td>
<td><?=$row['product_quantity']?></td>
<td><?=$row['product_final_price'] ?></td>
<td><select name='change[<?=$row['virtuemart_order_id']?>]'>
<option value='C'> Confirmed</option>
<option value='X'> Cancelled</option></select></td>
</tr>
<?php
}
?>
</tbody>
</table>
</fieldset>
<fieldset>
<table>
<tr>
<td><input type="submit" value="Update status" name="update status"> </td>
</tr>
</table>
</fieldset>
</form>
这是php,使用表单中的订单ID选择电子邮件地址。
<?php
$orderid = $_POST['orderid'];
// build SQL statement to select email addresses
$query3 = "SELECT email from ruj3d_virtuemart_order_userinfos where virtuemart_order_id = '$orderid'";
// execute SQL statement
$result3 = mysqli_query($link, $query3) or die(mysqli_error($link));
$subject = "Order confirmed by Home and decor";
$message = "Hello! This is a message to inform that your order has been confirmed";
$from = "107496@myrp.edu.sg";
$headers = "From: $from";
while($row3 = mysqli_fetch_array($result3)){
$addresses[] = $row3['email'];
}
$to = implode(",", $addresses);
mail($to, $subject, $message, $headers);
?>
您可以在标题中添加Cc
,这是创建标题的原因之一:
$headers = "From: $from" . "\r\n";
$headers .= "Cc: ".$secondEmail.', '.$thirdEmail . "\r\n"
我认为您需要在逗号后面添加一个空格,如下所示: $to = implode(", ", $addresses);
代替
Select
email
From
ruj3d_virtuemart_order_userinfos
Where
virtuemart_order_id = '$orderid'
做
Select
email
From
ruj3d_virtuemart_order_userinfos
Where
virtuemart_order_id In ($orderid)
(我可能将PHP弄错了,我只是在执行sql语句。如果在提交多个命令时$ orderid看起来不像是逗号分隔的列表,则需要将其设为一个)
实际上,不仅要这样做,还要了解SQL注入,并用PDO(尤其是PDO :: Prepare)替换已弃用的mysqli库。
哦,如果这些客户是不同的客户,请不要在“收件人”字段中发送邮件,您的客户不会喜欢您彼此发送电子邮件地址。
您使用错误的$_POST
字段来选择您的电子邮件地址。
第一个php文件生成的表单包含一个表,每行包含一个名为'orderid'
的输入字段。 但是,您真正感兴趣的字段是每一行的select
输入值。 这些都存储在$_POST
数组中一个名为change
单个数组中。
下面是一个示例,说明如何初始化$_POST
以对应于表单返回的选择值:
$_POST['change'] = array('id1' => 'C', 'id2' => 'X' /*, 'id3' => ... */ );
因此,您需要:
$_POST
表单返回的数组, 您应该使用以下内容替换您的php文件的开头,该操作如上所述。
第一个版本不清除条目:
<?php
function confirmed($v) { return ($v == 'C'); }
// pick the rows in your form table which have been set as confirmed, and use the keys
$orderid = implode(',', array_keys(array_filter($_POST['change'],'confirmed')));
// build SQL statement to select email addresses
$query3 = "SELECT email FROM ruj3d_virtuemart_order_userinfos WHERE virtuemart_order_id IN (".$orderid.")";
// etc.
这是一个消毒过程:
<?php
function confirmed($v) { return ($v == 'C'); }
// pick the rows in your form table which have been set as confirmed, and use the keys
$orderid = implode(',', array_map('mysql_real_escape_string',
array_keys(array_filter($_POST['change'],'confirmed'))));
// build SQL statement to select email addresses
$query3 = "SELECT email FROM ruj3d_virtuemart_order_userinfos WHERE virtuemart_order_id IN (".$orderid.")";
// etc.
有关将BCC与mail()
函数一起使用的信息,请参见此SO问题 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.