2016-11-28 151 views
0

我正在PHP中开发我的第一个项目,并且是新的。昨天我需要创建一个功能,向所有网站成员发送新帖子的电子邮件通知。我创建了一个功能,我不知道它有多好。如何使用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"; 
} 

在哪里发送电子邮件文件$标题,$ EMAIL_SUBJECT,$ EMAIL_BODY并且从这个循环来的$电子邮件。因此,每次循环运行时,都会有新的电子邮件ID,并且邮件将发送到该电子邮件ID。

这段代码在我的本地主机上工作,甚至在生产(hostgator托管),直到有几个网站成员。但是,当我在我的现场网站(拥有超过70个成员)上测试它时,页面停顿至少10秒钟,并返回错误“页面无法正常工作”。

那么这里究竟发生了什么?为什么不能发送电子邮件给更多的用户?

+0

是在实时服务器上的PHP邮件设置?而没有看到服务器日志非常难以调试。尽管如此,包括这样的文件当然不是“更好的代码编写”。更好的办法是构建一个邮件类并使用它。 – DevDonkey

+0

是的PHP邮件设置。我告诉过你它已经成功地向一些会员发送了电子邮件,但是当我通过70多个用户打电话时,它失败了。 – Sandy

回答

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); 
+0

谢谢你的回复。在send_mail.php中,我有$ header,$ email_subject,$ email_body,$ email和mail()终于发送邮件。所以将相同的代码作为功能为我做的工作。 而我会尝试set_time_limit(0)。还有一个问题,我应该输入多少分钟或几秒钟。 – Sandy

+0

是的,它会先生。 –

+0

好的。我正在尝试。请告诉我,如果这可以将时间限制增加到1分钟? – Sandy