Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 向多个收件人发送邮件_Php_Sql_Arrays_Email - Fatal编程技术网

Php 向多个收件人发送邮件

Php 向多个收件人发送邮件,php,sql,arrays,email,Php,Sql,Arrays,Email,我已经研究过如何使用mail()向多个收件人发送邮件,但我就是无法让它正常工作。我想做的是,对于我的每个订单,订单1、2、3,每个订单都有自己的电子邮件地址,当我将订单状态从“待定”更改为“确认”时,mail()将使用该id引用db表并发送这3个订单的电子邮件。但就我而言,它只是邮寄了最新的订单,即订单3。 这是我用来更改订单状态的表单 <form action="results-action" method="post" enctype="multipart/form-data">

我已经研究过如何使用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);

?>

我认为您需要在逗号后添加一个空格,如下所示:
$to=内爆(“,”,$addresses)

我认为您需要在逗号后添加一个空格,如下所示:
$to=内爆(“,”,$addresses)

您可以在标题中添加一个
Cc
,这是创建原因的一部分:

$headers = "From: $from" . "\r\n";
$headers .= "Cc: ".$secondEmail.', '.$thirdEmail . "\r\n"

您可以将
Cc
添加到标题中,这是创建原因的一部分:

$headers = "From: $from" . "\r\n";
$headers .= "Cc: ".$secondEmail.', '.$thirdEmail . "\r\n"
而不是

Select
  email 
From 
  ruj3d_virtuemart_order_userinfos 
Where 
  virtuemart_order_id = '$orderid'

(我可能把PHP搞错了,我只是在使用sql语句。如果提交多个时$orderid看起来不像逗号分隔的列表,那么需要将其设置为一个)

实际上,不仅要这样做,还要了解SQL注入,并用PDO替换不推荐的mysqli库

哦,如果他们是不同的客户,不要在“收件人”字段中发送邮件,您的客户将不会感谢您将他们的电子邮件地址发送给彼此。

而不是

Select
  email 
From 
  ruj3d_virtuemart_order_userinfos 
Where 
  virtuemart_order_id = '$orderid'

(我可能把PHP搞错了,我只是在使用sql语句。如果提交多个时$orderid看起来不像逗号分隔的列表,那么需要将其设置为一个)

实际上,不仅要这样做,还要了解SQL注入,并用PDO替换不推荐的mysqli库


哦,如果这些是不同的客户,不要在“收件人”字段中发送邮件,您的客户将不会喜欢您互相发送他们的电子邮件地址。

您使用了错误的
$\u POST
字段来选择您的电子邮件地址

<?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);

?>
第一个php文件生成的表单包含一个表,每行包含一个名为
'orderid'
的输入字段。但是您真正感兴趣的字段是每行的
select
输入值。这些都存储在
$\u POST
数组中名为
change
的单个数组中

下面是一个示例,说明如何初始化
$\u POST
以对应于表单返回的选择值:

$_POST['change'] = array('id1' => 'C', 'id2' => 'X' /*, 'id3' => ... */ );
因此,您需要:

  • 获取
    $\u POST
    中表单返回的数组
  • 过滤掉不等于“C”的条目
  • 保留这些条目的密钥
  • 逃离他们,给他们消毒
您应该将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.

您使用了错误的
$\u POST
字段来选择您的电子邮件地址

<?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);

?>
第一个php文件生成的表单包含一个表,每行包含一个名为
'orderid'
的输入字段。但是您真正感兴趣的字段是每行的
select
输入值。这些都存储在
$\u POST
数组中名为
change
的单个数组中

下面是一个示例,说明如何初始化
$\u POST
以对应于表单返回的选择值:

$_POST['change'] = array('id1' => 'C', 'id2' => 'X' /*, 'id3' => ... */ );
因此,您需要:

  • 获取
    $\u POST
    中表单返回的数组
  • 过滤掉不等于“C”的条目
  • 保留这些条目的密钥
  • 逃离他们,给他们消毒
您应该将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.

用逗号分隔收件人是正确的,var_dump($to)给了您什么?我建议您使用像swiftmailer这样的Mailer类。我的问题是,gmail或hotmail等提供商拒绝了我使用simple mail()函数发送的电子邮件,因为部分邮件丢失了。这样的邮件类将为您处理这些问题…顺便说一句,您应该逃避您的orderid@m02ph3u5我使用我自己的电子邮件测试订单8和9。var_dump($to)。它显示:字符串(51)”ahmadXXX@hotmail.com, ahmadXXX@hotmail.com“用逗号分隔收件人是正确的,var_dump($to)给了您什么?我建议您使用像swiftmailer这样的Mailer类。我的问题是,gmail或hotmail等提供商拒绝了我使用simple mail()函数发送的电子邮件,因为部分邮件丢失了。这样的邮件类将为您处理这些问题…顺便说一句,您应该逃避您的orderid@m02ph3u5我使用我自己的电子邮件测试订单8和9。var_dump($to)。它显示:字符串(51)”ahmadXXX@hotmail.com, ahmadXXX@hotmail.com“您不应该在2012年尝试使用
mail()
。使用多年来已经安全地解决了所有这些问题的各种可靠库之一。您不应该在2012年尝试使用
mail()
。使用多年来已经安全地解决了所有这些问题的各种实体库中的一个。好的。然后参考我上面的代码,我应该移除我的内爆吗??而($row3=mysqli_fetch_数组($result3)){$addresses[]=$row3['email'];}$to=introde(“,”,$addresses);idk y但有一个错误,请检查您正在使用的sql版本和第1行的语法错误“,)”??我试着按ctrl+f组合键,但是什么都没有。但是我想我理解了你的代码,id1是一个键,C是一个值。使用该函数检测值是否为C,然后获取键,即id。然后选择db表。还有别的办法吗?阿尔索