如何在PHP web应用程序中调度失败的电子邮件而不是cron作业方法


How to schedule a failed email in PHP web application other than cron job method?

我正在开发一个web应用程序,其中需要在预定的时间发送电子邮件。正确的场景是:如果邮件功能由于任何原因失败,则应该在特定时间段后重试,直到邮件成功。所以这里的问题是,如果我有邮件细节记录在某处(mysql db表在这里),重试机制是如何实现的。这可以在不使用cronjobs的情况下实现吗?如果是,如何??

无论如何,您都需要某种cron系统,但它可能只是调用您站点上特定页面的第三方服务。为什么一开始就不想使用cronjobs呢?

那么您的进程将只记录队列中任何失败的尝试,并每x小时处理队列(=发送邮件)。您还可以考虑设置重试的最大次数或类似的东西。

如果您必须使用预定时间,我肯定会使用cronjob。为了确保电子邮件被发送,只需使用一个true/false循环来检查它是否被发送。

对于电子邮件,您首先就不应该使用cron。任何功能的MTA都应该能够对它不能发送的消息进行排队——这是要求

您可以尝试创建一个包含无限循环的页面。这是完全未经测试的,我以前从未实现过这样的东西-这只是一个建议:

$hourToSend = 17; //this is the specified time to send (e.g. an hour, day, week..)
while(1)
{
    start:
    if(emailNotSent() == true && date('H') == $hourToSend) //boolean (function or variable) set after the email script has executed. could even be an array of email IDs.
    {
        resendEmail();
    }
    else
    {
        sleep(3600); //set an interval to check for failed emails, default = every hour
        goto start;
    }
}

这假设您访问的服务器具有良好的正常运行时间,不会受到一个浏览器窗口一直打开的影响(可能有利于监控,报告,日志记录等)。

+1欢迎提问、评论和建议