5

我的网站上有 80,000 名用户,我最近放弃了我一直在使用的论坛脚本,并自己构建了一些非常简单的东西,效果也很好(对于我的简单网站来说,论坛脚本过于臃肿且资源密集)

我唯一失去的是能够向我的所有成员群发电子邮件。

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

但是,我浏览了所有文档,看不到如何发送“一次 100 个”,我不知道该怎么做。

简而言之。我有一个带有两个输入“主题”和“消息”的表单的管理面板。当我点击提交时,发送 80,000 封电子邮件而不导致服务器崩溃或被标记为垃圾邮件的最安全方法是什么?

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

提前感谢您的任何建议!

4

4 回答 4

1

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

一次发送多封电子邮件是一回事,但将它们全部交付并通过服务器过滤器传递是另一回事......

于 2010-04-05T12:13:23.103 回答
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 小时内发送。更改睡眠时间以增加或减少时间。

于 2010-04-05T17:01:07.797 回答
0

Swiftmailer这样的类可以选择发送群发邮件。

于 2010-04-05T12:59:35.167 回答
0

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

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

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

不幸的是,Swiftmailer 没有“send/”文件夹,所以一旦发送它们就消失了。因此,如果出现错误,您不能简单地将文件从“发送/”移回队列以重新发送。

于 2015-01-03T18:02:48.630 回答