我正在使用phpMailer向大量用户发送时事通讯。过了一段时间,我得到了每个用户的电子邮件地址:
$query = "...";
if ($result = mysqli_query($link, $query)) {
while ($row = mysqli_fetch_assoc($result)) {
...
$mail->AddAddress($row['email']);
$newbody = str_replace("[NAME]",$row['name'],$body);
$mail->MsgHTML($newbody);
if(!$mail->send()) /* send Email */
{$_SESSION['logErrors'] .= $mail->ErrorInfo." (".$row['email'].")<br>";} else
{$_SESSION['logSent'] .= $row['email']." - ".date("H:m:s")."<br>";}
$mail->ClearAddresses();
...
} // mysqli_fetch_assoc
} // mysqli_query
现在我想添加一个选项,如"发送一份通讯给我"。我认为,最好的方法是在这个mysqli结果中添加一个额外的(虚拟的、临时的)行,其中包含我的电子邮件
因此,如果我选中该选项,if语句将更改我的查询,并用第一个新的虚拟行修改结果,其中包含我的电子邮件地址。
有人能帮我吗?我不知道查询应该是什么样子。
MYSQL: MODIFIED RESULT:
| id | email | name | group | | id | email | name | group |
|---------------------------| --> |------------------------------|
| 1 | foo@ | foo | bar | | 1 | myemail@ | my | my |
| 2 | .. | .. | .. | | 2 | foo@ | foo | bar |
有很多方法可以做到这一点。然而,您的查询可能是这样的:
(select "1", "myemail", "my","my") union (<your_select_query>)
但是,我建议创建一个处理数据的函数。对输入调用一次,对查询结果调用多次。
您不需要修改任何内容,如果您以循环方式发送时事通讯,您可以这样做:
$query = "...";
if ($result = mysqli_query($link, $query)) {
while ($row = mysqli_fetch_assoc($result)) {
...
$mail->AddAddress($row['email']);
...
} // mysqli_fetch_assoc
$mail->AddAddress('myemail@'); // here you add your email
} // mysqli_query
老实说,这不是发送时事通讯的最佳方式。现在,每个收到此电子邮件的人都会看到其他电子邮件的电子邮件地址,因此,如果您的用户之一是您的竞争对手,他将看到您所有客户/用户的消息。您应该单独发送电子邮件,或者使用AddBCC
而不是AddAddress
编辑
你可以用以下方式来做:
<?php
$query = "...";
if ($result = mysqli_query($link, $query)) {
$rows = [];
$record = [];
$record['name'] = 'Your name';
$record['email'] = 'Your email';
$rows[] = $record;
while ($row = mysqli_fetch_assoc($result)) {
$rows[] = $row;
}
foreach ($rows as $row) {
//...
$mail->AddAddress($row['email']);
$newbody = str_replace("[NAME]", $row['name'], $body);
$mail->MsgHTML($newbody);
if (!$mail->send()) /* send Email */ {
$_SESSION['logErrors'] .= $mail->ErrorInfo . " (" . $row['email']
. ")<br>";
} else {
$_SESSION['logSent'] .= $row['email'] . " - " . date("H:m:s")
. "<br>";
}
$mail->ClearAddresses();
//...
}
} // mysqli_query
所以,首先,您从数据库中获取所有结果(并将其添加为第一个记录数据),然后在循环中发送电子邮件。它可能也可以用其他方式完成,但不知道其余代码是什么,这可能是最好的方式。