【发布时间】:2020-02-24 17:03:56
【问题描述】:
我使用以下代码通过 PHPMailer 发送邮件。它从 db 将电子邮件发送给收件人,但它向他们发送了许多电子邮件。我只想向每个用户发送 1 封 HTML 表中的相关记录。例如。如果为用户返回 5 条记录,则它会向用户发送 5 封电子邮件,其中包含 1 条记录。
另外,我不想使用默认 PHPMailer 脚本使用的 try 和 catch 命令,但是 while ...
我怎样才能改变它来做我想做的事? 谢谢。
<?php
$stmt = sqlsrv_query( $conn, $sql );
$rows = array();
while($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)){
$rows[] = $row;
//foreach ($result as $row) {
try {
$mail->addAddress($row['email']);
}
catch (Exception $e) {
echo 'Invalid address skipped: ' . htmlspecialchars($row['email']) . '<br>';
continue;
}
try {
$body = 'Hi: '. $row['first'] .' '. $row['last'] .'<br>';
$body .= '<table border="1"><tr><th>Username</th><th>Day</th><th>Date</th></tr><th>Action</th>';
$body .= '<tr><td>';
$body .= $row['username'] . '</td><td>';
$body .= $row['day'] . '</td><td>';
$body .= $row['date'] . '</td><td>';
$body .= $row['action'] . '</td></tr>';
$body .= '</table>';
$mail->msgHTML($body);
$mail->send();
echo 'Message sent to :' . htmlspecialchars($row['last']) . ' '. htmlspecialchars($row['first']) . '(' . htmlspecialchars($row['email']) . ')<br>';
} catch (Exception $e) {
echo 'Mailer Error (' . htmlspecialchars($row['email']) . ') ' . $mail->ErrorInfo . '<br>';
$mail->smtp->reset();
}
$mail->clearAddresses();
$mail->clearAttachments();
}
?>
【问题讨论】:
-
我们有点需要查看您的 SQL 查询,但听起来您提到的每个“记录”都是结果行,所以这就是为什么您会得到您的行为。
-
您的查询很可能需要按用户 ID 分组。
-
$row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC返回所有用户的所有记录。您的意思是 SQL 语句中的GROUP BY?我认为它需要在while命令中再添加一个循环。
标签: php phpmailer html-email