我有这个代码用于从DB向用户发送邮件, 但即使更改订单,邮件也始终只发送给第一个用户。 (请求从AJAX发送)
$headers = ...
$mailbody = ...
$sql = 'SELECT `email`, `name` FROM `users`';
$result = mysqli_query($link, $sql) or die(mysqli_error($link));
while ($row = mysqli_fetch_array($result)) {
$rows[] = $row;
}
foreach ($rows as $row) {
if (mail($row['email'],"title", $mailbody, $headers)) {
echo 'mail '.$row['name'].' OK';
return TRUE;
} else {
echo 'MAIL ERROR!!!';
return FALSE;
}
}
答案 0 :(得分:1)
这是因为您在第一次成功发送邮件后执行return TRUE
。结束了这个功能。拿出那条线,然后在foreach
完成之后把它放好。
答案 1 :(得分:0)
return TRUE;
和return FALSE;
停止了foreach循环。
答案 2 :(得分:0)
这是因为这一行:return TRUE;
。它导致你的函数/脚本在那里结束,而不是继续使用foreach循环。
如果您希望脚本在第一次失败时停止,则应该有效:
$sql = 'SELECT `email`, `name` FROM `users`';
$result = mysqli_query($link, $sql) or die(mysqli_error($link));
while ($row = mysqli_fetch_array($result)) {
$rows[] = $row;
}
foreach ($rows as $row) {
if (mail($row['email'],"title", $mailbody, $headers)) {
echo 'mail '.$row['name'].' OK';
} else {
echo 'MAIL ERROR!!!';
return FALSE;
}
}
return TRUE;
如果所有电子邮件都已成功发送,则返回true,否则在第一次失败时返回false。
答案 3 :(得分:0)
因为你使用return true或false,foreach循环停止删除它并重试或者你可以将它包装在一个函数中然后如果成功返回true(在foreach循环之后),否则返回false