SwiftMailer Batch email times my Server out

隐身守侯 提交于 2019-12-06 04:36:38

问题


I realise that batchEmail is no longer part of the new SwiftMailer. So I made this script:

<?
//
// GC PRESS EMAILER v5
//
ini_set('display_errors',1);
error_reporting(E_ALL);
require_once("config.php");
include_once("hawkmail/mail/lib/swift_required.php");
$c=mysql_connect($dbh,$dbu,$dbp);
function SendEmail(){
    // DB
    $s=mysql_query("SELECT * FROM `newgc`.`press_list`");
    // Process Color Listing Loop
    while($r=mysql_fetch_array($s)){
    // ###########################
    // START LOOP
    // ###########################
        $name=$r['name'];
        $email=$r['email'];
        $to=array(''.$email.''=>''.$name.'');
        include("hawkmail/templates/press.php");
        # Email subject
        $str=$name;
        $str=substr($str, 0, strrpos($str, ' '));
        $subject='Dear '.$str.', you are invited to our Exclusive Party Collection Press Day!';
        # send message
        include("hawkmail/settings.php");       
    }
    // ###########################
    // END LOOP
    // ###########################
}
SendEmail();
?>

The database has 200 records. And I ran the script and it sends a few emails and then times out

504 Gateway Time-out

The name and email records are like

John Smith John.smith@site.com

Very plain. And my hawkmail/settings.php is this:

# mail
$smpturl="smtp.sendgrid.net";
$mailu="sitesitesite";
$mailp="sitessssssssssss";
$from=array("no-reply@site.com"=>"site.com");

# login credentials & setup Swift mailer parameters
$transport=Swift_SmtpTransport::newInstance($smpturl, 587);
$transport->setUsername($mailu);
$transport->setPassword($mailp);
$swift=Swift_Mailer::newInstance($transport);

# create a message (subject)
$message=new Swift_Message($subject);

# attach the body of the email
$message->setFrom($from);
$message->setBody($html, 'text/html');

$message->setTo($to);
$message->addPart($text, 'text/plain');

# actually send the message
if($recipients=$swift->send($message, $failures)){}else{}

Is there anyway to increase the limit of PHP time out (I use Ubuntu and Nginx) or is there an alternative to BatchMail() really don't understand why it was removed.

Can someone post examples of Batch mail scripts using the new swiftmailer?


回答1:


Sending emails is the most complicated thing to do online.

It is the second most used service and the most abused.

I built my own custom email platform for sending bulk emails.

The timeout you experience is because of the Apache and PHP execution limits.

You need to run it as a CLI application with set_time_limit (0);

php /path/to/app/script.php something like this straight in the console.

If you do not have SSH access then run it with shell_exec like this:

shell_exec("php /path/to/app/script.php > /dev/null 2>/dev/null &");

This will ensure that the script that calls it does not hang around till it finishes.



来源:https://stackoverflow.com/questions/12178364/swiftmailer-batch-email-times-my-server-out

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!