我已经开发了一个使用php的自定义简报发送模块,其中管理员可以向订阅者发送简报 . 可以在模块内设计时事通讯,只需点击一下即可选择包含数千封电子邮件的订阅者类别 . 现在问题是我有限制每小时发送500封电子邮件 . 使用sleep()会导致最大执行脚本时间到期 .
经过一些研究后,我发现这可以通过cron job来完成 . 我在cpanel中创建了一个cron作业,设置为每5分钟但我无法弄清楚当管理员点击管理面板中的send newsletter按钮时如何触发此cron作业 . 我正在使用swiftmailer库并在某个类别ID上查询订阅者表 .
任何帮助将不胜感激 .
1 回答
这就是我要做的:
有两张 table . 一个用于发送电子邮件,一个用于电子邮件,电子邮件将通过电子邮件收到的简报 .
Structure examples
表
newsletter
:id
- Auto INCemail_subject
- 时事通讯的主题email_html
- 电子邮件的HTML版本email_plain_text
- 电子邮件的纯文本版本created_datetime
- 创建了datetime简报表
newsletter_recipients
:id
- Auto INCnewsletter_id
- 正在发送的简报的ID(创建一个引用newsletter
表上的id
字段的外键email
- 电子邮件的HTML版本name
- 客户名称sent
- 电子邮件是否已发送(这不是必需的,请参阅下文)当管理员发送电子邮件时,使用html /纯文本版本创建新闻稿行(您只能使用一列,最好是使用html和纯文本版本的电子邮件),并将收件人添加到newsletter_cipients表中,并引用newsletter_id到您添加的时事通讯的ID .
现在,您每小时运行一次PHP cron作业文件 . 此文件将检查是否有客户需要发送新闻通讯,如果是,请将其发送出去 . 发出后,您可以删除收件人行或将其标记为已发送 . 我个人会删除它们以防止数据备份 . 只运行php作业直到500或你想发送的任何数量的电子邮件,然后脚本结束 . 接下来的一小时,它将运行并接下来的500 .
使用这个系统,新闻通讯不会立即发出,它将在cron作业运行时完成 . 但这是我能快速为您考虑的最佳解决方案 . 那个或者得到一个邮件服务器,让你发送你想要的所有电子邮件,并使用像gearman这样的东西来处理负载 balancer .
注意:将新闻稿存储在数据库中非常方便,因此管理员可以回顾并查看他们何时发送新闻稿 . 此外,您可以将其升级到另一个级别并在
newsletter_recipient
表上创建一个sent_date
列,该列存储电子邮件的发送时间(如果您只是将收件人标记为已发送或不是已删除),这样您知道电子邮件何时完成发送,谁在什么时候收到电子邮件,等等 . 这完全取决于你) .