【发布时间】:2016-09-04 18:30:43
【问题描述】:
我有一个 mysql 数据库,其中存储了一个表,其中包含一些关于人员信息的列
- object1 (p.k)
- 用户名
- 电子邮件
- 服务
- 已发送
使用 phpmailer 的 php 代码,我可以连接到数据库,从 sql 查询中提取我需要的信息,并通过 foreach 函数为每个人发送电子邮件,正确发送每封电子邮件后,“已发送”列的数据会更新从 0 到 1... 一切正常,但有可能有些人对多个自己的“object1”有相同的“电子邮件”,在这种情况下,每一行都会向他们发送一封电子邮件...
例如,如果一个人拥有电子邮件 aa@aa.it 有 30 个“object1”,他将收到 30 封不同的电子邮件。
如何将工作与来自查询的数据结合起来,并且与一封电子邮件相关联的所有这些 object1 是否仅在一封电子邮件中发送,并将所有主题列为内容?
我认为我需要用 if/else 指令完成脚本,但我不知道如何管理它。
下面的脚本部分:
<?
$mail = new PHPMailer;
$result = mysqli_query($mysql, 'SELECT * FROM db WHERE service LIKE \'%something%\' AND sent = 0 ORDER BY object1 LIMIT 0 , 30');
foreach ($result as $row) {
$mail->addAddress($row['email'], $row['object1']);
/* i use it to use an external .html file to send email and replace vairables in it */
$message = file_get_contents('template/temaplate.html');
$message = str_replace('%email%', $row['email'], $message);
$message = str_replace('%object1%', $row['object1'], $message);
//Set the message
$mail->MsgHTML($message);
$mail->AltBody = strip_tags($message);
if (!$mail->send()) {
echo "Mailer Error (" . str_replace("@", "@", $row["email"]) . ') ' . $mail->ErrorInfo .;
break; //Abandon sending
} else {
echo "Message sent to :" . $row['object1'] . ' (' . str_replace("@", "@", $row['email']) .;
//Mark it as sent in the DB
mysqli_query(
$mysql,
"UPDATE db SET sent = true WHERE object1 = '" .
mysqli_real_escape_string($mysql, $row['object1']) . "'"
);
}
// Clear all addresses and attachments for next loop
$mail->clearAddresses();
$mail->clearAttachments();
}
?>
我希望能正确解释我的需求,并为此向您寻求一些帮助和建议。
【问题讨论】:
-
一些合理的代码缩进是个好主意。它帮助我们阅读代码,更重要的是,它将帮助 您调试您的代码 Take a quick look at a coding standard 为您自己谋取利益。您可能会被要求在几周/几个月内修改此代码,最后您会感谢我的。
-
您似乎没有尝试自己编写此代码。 SO != 免费编码资源
标签: php mysql email foreach phpmailer