如何发送异步邮件?

时间:2015-10-29 06:50:10

标签: php

将邮件发送给用户并执行代码直到Location标头需要一些时间。我想在另一个线程中运行邮件发送代码,因此找不到或加载该特定页面不会花费时间。

$sql = "SELECT email FROM user_info where username = ?";

        $statement = $db->prepare($sql);
        $statement->bindParam(1, $cmtTo);
        $statement->execute();

        $row = $statement->fetch();

//        echo $row['email'];

        $mailSender = new PuzzleEmailSender();
        $body = "<html>
                    <body>
            <h2 style=\"font-weight:bold;font-size:24px;font-family:Helvetica,Arial,sans-serif;line-height:26px;color:#999;margin:0\"><img class=\"navbarimg\"  src=\"" alt=\"/></h2><br>
                            <div style=\"font:normal 14px Helvetica,Arial,sans-serif;line-height:19px;color:#333\">
                <p>Hi, <strong>" . $cmtTo . "</strong> </p>
                                <p><strong>" . $cmtBy . "</strong> expressed comment on your puzzle answer</strong></p>
                <p><a style=\"text-decoration:underline;color:#00aff0;font-weight:bold\" href='" "' target=\"_blank\">Click on the link to check</a></p>                                
                <p>Team,</p>
                <p style=\"font-weight:bold;font-size:15px;line-height:24px;font-family:Arial,Helvetica,sans-serif;color:#666;margin:0\">
                " "</p></div>
                            </div>
                    </body>
        </html>";

        $subject = "Comment On Your Answer";

        $mailSender->sendQueryEmail($row['email'], "", $body, $subject, "", false);

        header("Location: puzzleDisplay");

2 个答案:

答案 0 :(得分:1)

创建表格: mail_queue

字段: ID,电子邮件,主题,正文

变化:

<input type="text" class="form-control" id="FNAME" name="FNAME" value="<?php echo set_value('FNAME'); ?>">

$mailSender->sendQueryEmail($row['email'], "", $body, $subject, "", false);

创建脚本: mail_queue.php ,它将执行获取所有电子邮件并发送邮件然后在发送后删除记录

放到crontab: * * * * * php mail_queue.php

答案 1 :(得分:0)

您可以在后台发送邮件。将邮件任务添加到某个队列,然后队列将不时执行。

这些可以通过多种方式实现:

  • 您可以使用持久存储队列。就像你将邮件存储到 D B。然后来自cron的脚本将检查未发送的邮件并发送一个 一个人。

  • 您可以使用gearman-job-server。将您的邮件排入作业服务器 从你的主脚本。然后编写用于在gearman worker脚本中发送电子邮件的代码。

  • 您可以使用托管队列服务解决方案,例如:iron.io。 Laravel 队列使用铁api。