从PHP发送大量电子邮件

时间:2010-04-05 12:02:47

标签: php email massmail

我的网站上有80,000个用户,我最近偏离了我一直在使用的论坛脚本,并构建了一些非常简单的东西,同样有效(论坛脚本太过臃肿,资源密集,我的简单网站)

我唯一丢失的是能够通过电子邮件向我的所有成员发送电子邮件。

所以我想找一个自己做的脚本。环顾四周(包括这里的问题)我决定使用Swift Mailer是一个好主意。

然而,我已经阅读了所有文档,但看不出如何发送“一次100个”,我不知道如何去做。

简单地说。我有一个管理面板,其中包含两个输入“subject”和“message”的表单。当我点击提交时,最安全的方式是在不崩溃我的服务器或被标记为垃圾邮件的情况下发送80,000封电子邮件?

我是一个非常强大的专用服务器,所以没有与共享服务器相关的问题。

提前感谢任何建议!

4 个答案:

答案 0 :(得分:1)

安全选项是一个接一个地发送电子邮件。我通常发送不超过10封电子邮件10分钟。 cron发出的简单脚本就是您所需要的。

一次发送许多电子邮件是一回事,但是让它们全部交付并通过服务器传递过滤器是不同的东西......

答案 1 :(得分:0)

Swiftmailer这样的课程可以选择群发电子邮件。

答案 2 :(得分:0)

这是我的想法......假设你是托管在linux类型的盒子上。在不知道您的代码的情况下,这当然是最低限度的。 在服务器上创建一个名为sendmails.php的文件

<? 
loop through email addresses however you do it
{
 usleep(250000); // sleep for quarter of a second 
 mail('user@example.com', 'My Subject', 'message');
}
?>

保存,然后在另一个文件startemails.php中,您可以在浏览器中打开

<?
system("&php sendmails.php");
?>

即使服务器超时,系统调用仍应完成其工作。使用此方法,80,000封电子邮件应发送约6小时。 改变睡眠时间,花费更多或更少的时间。

答案 3 :(得分:0)

而不是Cron,你需要一个守护进程,Swiftmailer不能轻易做到这一点。 问题是这样的:你可以有一个Cronjob触发器Swiftmailer让我们说每隔5分钟,但如果它还没有完成发送10000封邮件会怎么样?它可能会启动另一个进程,因此您可能最终会尝试在队列中发送相同的文件。

我使用了一种解决方法并创建了一个简单的PHP守护程序(bash脚本也可以正常工作),它会不断检查队列中是否有电子邮件;如果是这样,它启动Swiftmailer并发送1封电子邮件。 (将swiftmailer限制设置为1)。然后daemonscript等待0.5秒,然后再次检查。

如果需要,Swiftmailer可以处理多个队列(您需要为每个队列启动第二个deamon进程)。

不幸的是,Swiftmailer没有&#39;发送/&#39;文件夹,所以一旦发送它们就会消失。因此,如果出现错误,您无法简单地从&#39;发送/&#39;移动文件。回到队列中重新发送。

相关问题