我有一个cronjob,每5分钟执行一次PHP脚本,以便向新成员发送欢迎信。
我的目标是从MySQL获取数据,将其拉入数组,循环结果并使用PHP mail()
函数将每个结果邮寄给收件人。
mail()
部分由于某种原因无效,我完全确定mail()
已配置并正常工作,因为我可以在foreach循环之外使用mail()
。
以下示例代码:
从MySQL获取数据并将其存储在数组中:
while ($row = $result->fetch_assoc()) {
$tickets[] = array($row['id'], $row['namn'], $row['epost'],
$row['meddelande'], $row['datum']);
}
$tickets
是一个数组。
循环搜索结果并邮寄:
foreach ($tickets as $ticket) {
if (mail("mymail@example.org", "Msg from $ticket[1]", "$ticket[3]", "From: $ticket[2]")) { // Always called, but doesn't send the mail
$query = 'UPDATE ticket SET skickat = 1 WHERE id = ?';
if ($stmt = $db->prepare($query)) {
$stmt->bind_param('s',$ticket[0]);
$stmt->execute();
} else {
sleep(5);
$query = 'UPDATE ticket SET skickat = 1 WHERE id = ?';
$stmt = $db->prepare($query);
$stmt->bind_param('s',$ticket[0]);
$stmt->execute();
}
} else {
die('The email could not be sent');
}
}
代码有效,并且它将MySQL记录更新为skickat = 1,因此我知道代码已经执行了,但它并没有发送邮件。
我无法访问Apache创建的error.log,并且在启用PHP错误时没有错误。
我错过了什么?
我使用Apache 2和PHP 7
答案 0 :(得分:0)
您遇到的问题可能与您的托管设置有关。为防止垃圾邮件,许多托管服务提供商不允许快速发送许多电子邮件。您可以通过添加以下内容来解决此问题:
sleep( 5 ); // causes the script to wait for 5 seconds
在你的if语句之后。