foreach循环中的PHP mail()

时间:2017-11-02 20:03:07

标签: php foreach php-7

我有一个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

1 个答案:

答案 0 :(得分:0)

您遇到的问题可能与您的托管设置有关。为防止垃圾邮件,许多托管服务提供商不允许快速发送许多电子邮件。您可以通过添加以下内容来解决此问题:

sleep( 5 ); // causes the script to wait for 5 seconds
在你的if语句之后