首页 文章

如何在Cpanel中使用Cron处理发送电子邮件限制?

提问于
浏览
0

我已经开发了一个使用php的自定义简报发送模块,其中管理员可以向订阅者发送简报 . 可以在模块内设计时事通讯,只需点击一下即可选择包含数千封电子邮件的订阅者类别 . 现在问题是我有限制每小时发送500封电子邮件 . 使用sleep()会导致最大执行脚本时间到期 .

经过一些研究后,我发现这可以通过cron job来完成 . 我在cpanel中创建了一个cron作业,设置为每5分钟但我无法弄清楚当管理员点击管理面板中的send newsletter按钮时如何触发此cron作业 . 我正在使用swiftmailer库并在某个类别ID上查询订阅者表 .

任何帮助将不胜感激 .

1 回答

  • 0

    这就是我要做的:

    有两张 table . 一个用于发送电子邮件,一个用于电子邮件,电子邮件将通过电子邮件收到的简报 .

    Structure examples

    newsletter

    • id - Auto INC

    • email_subject - 时事通讯的主题

    • email_html - 电子邮件的HTML版本

    • email_plain_text - 电子邮件的纯文本版本

    • created_datetime - 创建了datetime简报

    newsletter_recipients

    • id - Auto INC

    • newsletter_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 列,该列存储电子邮件的发送时间(如果您只是将收件人标记为已发送或不是已删除),这样您知道电子邮件何时完成发送,谁在什么时候收到电子邮件,等等 . 这完全取决于你) .

相关问题