PHP Mailer,在发送电子邮件时阻止整个服务器执行

时间:2019-06-11 10:03:13

标签: javascript php jquery cron phpmailer

首先,我看到了以下问题:Send mail without blocking 'execution'

但是,我需要知道为什么PHP不是多线程进程,但是如果两个人尝试同时连接就没有问题。

我实际上是通过Ajax调用来调用邮件脚本的:

 $.ajax({
     url: 'sendMailTemplate.php', 
     type: 'POST',
     data: formData,
     processData: false,
     contentType: false,
     success: function (data) {}
...

我的PHP邮件程序的问题是,当我发送电子邮件时,如果这需要10秒,那么10秒钟我将无法使用我的网站的任何功能(并且该网站对所有人来说都是10秒钟都无法使用) )。 我应该尝试使用cron作业吗?有针对PHP邮件程序+ cron作业的教程吗?除了cron作业,最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

我应该尝试使用cron作业吗?

是否有有关PHP Mailer + cron作业的教程?
我通过使用多重引用尝试了自己的逻辑:

下面的逻辑像队列一样执行,并根据您的cronjob和您的按小时发送邮件限制发送时间。

  1. 邮件:当时单击发送电子邮件时,您已将所有电子邮件及其"temp_table"列存储到数据库的"to,cc,bcc,suject,body"中。
  2. 为小时(您的时间)写一份cron作业,它将在一定时间范围内执行。
  3. 在cron脚本中,您必须编写代码,该代码将从"temp_tables"接收电子邮件(将查询限制设置为不记录),然后发送给收件人。成功完全发送后,请从您数据库的"temp_table"中删除这些邮件。

除了cron作业,最好的方法是什么?
您已与您的服务提供商联系,以提高小时邮件发送限制,提高服务器速度,php.ini:更改加载时间(此选项并非每次都有效),使用其他语言(如python)

答案 1 :(得分:0)

只需切换到 smtpd 即可将邮件放入队列并异步发送。