如何在php中异步发送邮件

时间:2018-04-04 12:10:43

标签: php mysql codeigniter

我必须使用php codeigniter向多个收件人发送电子邮件。问题是它需要花费大量时间来发送邮件。我已在数据库中保存了电子邮件ID,以便稍后从后台发送电子邮件。

$baseUrl = BASE_URL;
$sendmailurl = $baseUrl."index.php/SendEmail";
exec("wget -qO- $sendmailurl  &> /dev/null &");

sendEmail是我的控制器,它从数据库中读取数据并发送邮件。但是exec没有在后台执行,浏览器等待,直到所有的电子邮件都被发送到数据库中的所有地址。

2 个答案:

答案 0 :(得分:0)

您可以触发事件以将电子邮件或帖子发送到webhook,以便在某处解决此电子邮件。

例如,如果您有专门的地方发送电子邮件,那么您可以这样做。

POST / HTTP/1.1 
Host: emailer.example.org 
Content-Type: application/json
 {"email_address":"destination@server.com","subject":"Foobar", "body":"Email body"}

通过这种方式,您可以将电子邮件服务与您正在进行的操作分离。或者,您可以使用像Rabbit MQ这样的消息队列来触发电子邮件事件异步

答案 1 :(得分:0)

看起来你的命令格式不正确。这取自评论中的PHP manual page for exec(),似乎与平台无关。

<?php 
    function execInBackground($cmd) { 
        if (substr(php_uname(), 0, 7) == "Windows"){ 
            pclose(popen("start /B ". $cmd, "r"));  
        } 
        else { 
            exec($cmd . " > /dev/null &");   
        } 
    } 
?>