PHPMailer 循环发送多封邮件
PHPMailer sends multiple emails with loop
我使用以下代码发送邮件 PHPMailer.It 从 db 向收件人发送电子邮件,但它向 them.I 发送了很多电子邮件 只想发送 1 封相关记录HTML Table 每个 user.eg。如果为用户返回 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();
}
?>
你是这个意思吗?只将所有结果发送给结果集中的每个人一次?
$stmt = sqlsrv_query( $conn, $sql );
$rows = array();
$body = '<table border="1"><tr><th>Username</th><th>Day</th><th>Date</th></tr><th>Action</th>';
while($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)){
$rows[] = $row;
$name = $row['first'] .' '. $row['last'];
$body .= '<tr><td>';
$body .= $row['username'] . '</td><td>';
$body .= $row['day'] . '</td><td>';
$body .= $row['date'] . '</td><td>';
$body .= $row['action'] . '</td></tr>';
$mail->addAddress($row['email'], $name);
}
$body .= '</table>';
$mail->msgHTML($body);
$mail->send();
这是双 while 循环的示例。 $sql = select 在您的时间范围内或其他部分标准
内的所有人员和电子邮件地址
$stmt = sqlsrv_query( $conn, $sql );
while($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)){
$name = $row['first'] .' '. $row['last'];
$email = $row['email'];
$body = '<table border="1"><tr><th>Username</th><th>Day</th><th>Date</th></tr><th>Action</th>';
// now get this person's messages
$sql2 = "SELECT username, day, date, action from Message WHERE name = $row['name']";
$stmt2 = sqlsrv_query( $conn, $sql2 );
while($row2 = sqlsrv_fetch_array( $stmt2, SQLSRV_FETCH_ASSOC)){
$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>';
// at this point you can create the phpmailer add the single email address & message body, and send the email
}
好的,这里是您可以尝试重新组织结果的东西。您可以用 SQL 结果集替换 $testing 数组。使用两个 foreach 循环,您可以将它重新组织成一个多维数组 $names,然后循环通过它来发送您的电子邮件。
$test1 = array('name'=>'mike','email'=>'mike@mike','day'=>'monday','action'=>'acrtion1');
$test2 = array('name'=>'mike','email'=>'mike@mike','day'=>'tuesday','action'=>'acrtion2');
$test3 = array('name'=>'mike','email'=>'mike@mike','day'=>'wedday','action'=>'acrtion3');
$test4 = array('name'=>'dave','email'=>'dave@mike','day'=>'monday','action'=>'acrtion1');
$test5 = array('name'=>'dave','email'=>'dave@mike','day'=>'tuesday','action'=>'acrtion2');
$test6 = array('name'=>'dave','email'=>'dave@mike','day'=>'wedday','action'=>'acrtion3');
$test7 = array('name'=>'tom','email'=>'tom@mike','day'=>'monday','action'=>'acrtion1');
$test8 = array('name'=>'tom','email'=>'tom@mike','day'=>'tuesday','action'=>'acrtion2');
$test9 = array('name'=>'tom','email'=>'tom@mike','day'=>'wedday','action'=>'acrtion3');
$testing = array($test1,$test2,$test3,$test4,$test5,$test6,$test7,$test8,$test9);
$names = array();
foreach($testing as $test){
$names[$test['name']][] = $test;
}
print_r($names);
foreach($names as $name=>$records){
echo "<p>email $name";
foreach($records as $record){
// this is where you can construct the email body for current $name
echo "<p>".$record['email']." ".$record['day']." ".$record['action'];
}
// now send the email to current $name
}
我的sqlreturns下面的result.The'email'要GROUPED BY???
我使用以下代码发送邮件 PHPMailer.It 从 db 向收件人发送电子邮件,但它向 them.I 发送了很多电子邮件 只想发送 1 封相关记录HTML Table 每个 user.eg。如果为用户返回 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();
}
?>
你是这个意思吗?只将所有结果发送给结果集中的每个人一次?
$stmt = sqlsrv_query( $conn, $sql );
$rows = array();
$body = '<table border="1"><tr><th>Username</th><th>Day</th><th>Date</th></tr><th>Action</th>';
while($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)){
$rows[] = $row;
$name = $row['first'] .' '. $row['last'];
$body .= '<tr><td>';
$body .= $row['username'] . '</td><td>';
$body .= $row['day'] . '</td><td>';
$body .= $row['date'] . '</td><td>';
$body .= $row['action'] . '</td></tr>';
$mail->addAddress($row['email'], $name);
}
$body .= '</table>';
$mail->msgHTML($body);
$mail->send();
这是双 while 循环的示例。 $sql = select 在您的时间范围内或其他部分标准
内的所有人员和电子邮件地址$stmt = sqlsrv_query( $conn, $sql );
while($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)){
$name = $row['first'] .' '. $row['last'];
$email = $row['email'];
$body = '<table border="1"><tr><th>Username</th><th>Day</th><th>Date</th></tr><th>Action</th>';
// now get this person's messages
$sql2 = "SELECT username, day, date, action from Message WHERE name = $row['name']";
$stmt2 = sqlsrv_query( $conn, $sql2 );
while($row2 = sqlsrv_fetch_array( $stmt2, SQLSRV_FETCH_ASSOC)){
$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>';
// at this point you can create the phpmailer add the single email address & message body, and send the email
}
好的,这里是您可以尝试重新组织结果的东西。您可以用 SQL 结果集替换 $testing 数组。使用两个 foreach 循环,您可以将它重新组织成一个多维数组 $names,然后循环通过它来发送您的电子邮件。
$test1 = array('name'=>'mike','email'=>'mike@mike','day'=>'monday','action'=>'acrtion1');
$test2 = array('name'=>'mike','email'=>'mike@mike','day'=>'tuesday','action'=>'acrtion2');
$test3 = array('name'=>'mike','email'=>'mike@mike','day'=>'wedday','action'=>'acrtion3');
$test4 = array('name'=>'dave','email'=>'dave@mike','day'=>'monday','action'=>'acrtion1');
$test5 = array('name'=>'dave','email'=>'dave@mike','day'=>'tuesday','action'=>'acrtion2');
$test6 = array('name'=>'dave','email'=>'dave@mike','day'=>'wedday','action'=>'acrtion3');
$test7 = array('name'=>'tom','email'=>'tom@mike','day'=>'monday','action'=>'acrtion1');
$test8 = array('name'=>'tom','email'=>'tom@mike','day'=>'tuesday','action'=>'acrtion2');
$test9 = array('name'=>'tom','email'=>'tom@mike','day'=>'wedday','action'=>'acrtion3');
$testing = array($test1,$test2,$test3,$test4,$test5,$test6,$test7,$test8,$test9);
$names = array();
foreach($testing as $test){
$names[$test['name']][] = $test;
}
print_r($names);
foreach($names as $name=>$records){
echo "<p>email $name";
foreach($records as $record){
// this is where you can construct the email body for current $name
echo "<p>".$record['email']." ".$record['day']." ".$record['action'];
}
// now send the email to current $name
}
我的sqlreturns下面的result.The'email'要GROUPED BY???