SwiftMailer库执行缓慢

| 我正在尝试在此邮件系统中实现swiftmailer。我的客户大约需要定期发送30万封活动电子邮件。系统最初配置为sendmail和php \的mail()函数。此后,我已经安装了最新版本的postfix。 可能是我的期望过高,但是我给我的印象是,这东西可以将很多电子邮件放入FAST队列中,而这正是我所需要的。所有的速率处理和节流都是在postfix端完成的,因此能够像我的postfix设置一样快地对其进行排队会很棒。 虽然我可以实现将联系人直接插入队列的方法,但我宁愿根据各种选项(例如smtp服务器的全局发送速率)来限制进入队列的电子邮件输入。 下面的代码只是一些基本测试。它遍历30个单独的邮件smtp帐户,每个帐户都有其自己的费率属性。我正在尝试将每个cron的最大电子邮件数量拉出数据库,然后使用
batchsend()
发送所有电子邮件,然后循环到下一个smtp帐户,发送最大数量,依此类推。 从技术上讲它确实起作用,但是它确实很慢。以每个smtp帐户60 / min的速率,每个过程大约需要15-20秒,这显然不起作用,也根本不符合我的预期。 为什么发送速度如此之慢真的有什么明显的认识吗? smtp服务器看起来不错,没有过载或类似的情况。没有后缀错误,没有明显的错误。 一旦电子邮件进入队列,我就让postfix发挥作用。很难以合理的速度将其放入队列。我知道swiftmailer是解决我所有问题的灵丹妙药,但是我敢肯定它的发送速度应该比它快。有什么想法或建议吗?
$query = \"SELECT * FROM `smtp`\";
    $result = mysql_query($query) or die(mysql_error());
    $num_rows1 = mysql_num_rows($result);
    while($row = mysql_fetch_array($result)){
        $smtp = $row[\'ip\'];
        $login = $row[\'user\'];
        $pass = $row[\'pass\'];
        $smtp_domain = $row[\'domain\'];   

    $querya = \"SELECT * FROM `mailer_lists` ml JOIN `mailer_controller` mc ON ml.project_name = mc.project_name LIMIT \".$global_limit.\"\";
    $resulta = mysql_query($querya) or die(mysql_error());
    $num_rows2 = mysql_num_rows($resulta);

    // quickly check if any mail returned query
    if ($num_rows2 < 1){
        mysql_close($connection);
        echo \"Nothing to mail... \\n\";
        die();
        }

    while($rowa = mysql_fetch_array($resulta)){
        $email[] = $rowa[\'email\'];
        $project_name = $rowa[\'project_name\'];
        $from_name = $rowa[\'from_name\'];
        $subject = $rowa[\'subject\'];
        $body = $rowa[\'body\'];
        $from = array($spun_from_email => $spun_from_name);
    }    

    require_once \'swift/swift_required.php\';
        $transport = Swift_SmtpTransport::newInstance(\'\'.$smtp.\'\', 25)
          ->setUsername($login)
          ->setPassword($pass)
          ;
        $mailer = Swift_Mailer::newInstance($transport);
        $message = Swift_Message::newInstance()
          ->setSubject($subject)
          ->setFrom($from)
         // ->addPart(\'add part message\', \'text/html\')
         // ->attach(Swift_Attachment::fromPath(\'\'))
          ->setTo($email)
          ->setBody($body)
        ;
        $mailout = $mailer->batchSend($message);
         // ->addPart(\'add part message\', \'text/html\')
         // ->attach(Swift_Attachment::fromPath(\'\'))
          ;  


            $queryb = \"DELETE FROM `mailer_lists` WHERE `project_name` = \'\".$project_name.\"\' AND `email` = \'\".implode(\'\\\' OR `email` = \\\'\',$email).\"\'\";  
            $resultb = mysql_query($queryb) or die(mysql_error());
            $c++;
            echo \"sent $num_rows1 emails to smtp $c \\n\";
        }
    
已邀请:
您的问题不是您正在使用的库。这很慢,因为您正在将大量数据发送到电子邮件服务器...因此,postfix会尝试处理所有数据,然后再回复您。尝试在不关闭连接的情况下一次发送一封电子邮件,这样电子邮件服务器可以更快地处理您发送给它的每封电子邮件,并更快地返回答复。 将以下行移到脚本顶部
require_once \'swift/swift_required.php\';
延迟与smtp服务器的连接。您不需要每次都想发送电子邮件时就进行连接。在顶部连接一次,并检查连接是否有效(否则重新连接),发送电子邮件并清除字段
to
from
等。 从顶部的数据库中获取您的smtp设置,然后删除巨型ѭ5。那根本无法使代码可读     

要回复问题请先登录注册