如何使用PHP发送批量电子邮件?

时间:2016-11-28 12:26:14

标签: php apache

我正在用PHP开发我的第一个项目并且是新的。昨天我需要创建一个功能,向所有网站成员发送新帖子的电子邮件通知。我创建了一个功能,但我不知道它有多好。

创建帖子后,我选择了sql中的所有网站成员 -

包括“db.php”;

$query = "SELECT * FROM user";
$runQuery = mysqli_query($db, $query);

这给了我所有的网站成员。然后我循环遍历数组并抓住每个成员的电子邮件ID -

while($users = mysqli_fetch_assoc($runQuery) {
    $email = $users['email'];
}

这样我就拥有了每个成员的电子邮件ID。现在在循环中,我可以使用mail()函数向每个站点成员发送电子邮件。

为了更好的代码编写,我在另一个文档中编写了发送电子邮件代码,并使用'include()'函数进行链接。像这样 -

while($users = mysqli_fetch_assoc($runQuery) {
     $email = $users['email'];

include "send_email.php";
}

发送电子邮件文件包含$ header,$ email_subject,$ email_body以及来自此循环的$ email。因此,每次循环运行时,它都有新的电子邮件ID,邮件将被发送到该电子邮件ID。

此代码在我的localhost上运行,即使在生产(hostgator托管)中也是如此,直到网站成员很少。但是,当我在我的实际网站上测试它(有超过70个成员)时,页面停留了至少10秒并返回错误“页面无效”。

那么这里究竟发生了什么?为什么它无法向更多用户发送电子邮件?

1 个答案:

答案 0 :(得分:0)

因为你在每一步都包含“send_mail.php”文件,这意味着大量的内存和CPU使用率。那你为什么不这样做呢:

send_mail.php文件:

function sendMail($email){
   //your mail stuff..
}

你的while循环:

include "send_mail.php";
while($users = mysqli_fetch_assoc($runQuery)){
    $email = $users['email'];
    sendMail($email);
}

PHP脚本也有执行代码的时间限制。如果你想绕过它,你必须把这个代码写到文件的顶部(有while循环):

set_time_limit(0);