Php 如何使PEAR::Mail实现更快地发送批量电子邮件?

Php 如何使PEAR::Mail实现更快地发送批量电子邮件?,php,email,sendmail,pear,pear-mail,Php,Email,Sendmail,Pear,Pear Mail,我使用了两个电子邮件模板并测试了性能: 100封邮件,每封邮件包含25种产品,耗时24秒 100封邮件,每封邮件包含12种产品,耗时16秒 所有图像(例如徽标、横幅、产品)都是文本,用于调用服务器上承载图像的URL) 考虑到我只为每个产品添加了几KB,我觉得时间的增长(100封电子邮件从16秒增加到24秒)是巨大的。如果这种情况只发送100封电子邮件,那么发送数千封电子邮件在完成发送的时间和性能方面的影响将非常大。我的代码使用以下内容: .... require_once "/.../ea-ph

我使用了两个电子邮件模板并测试了性能:

  • 100封邮件,每封邮件包含25种产品,耗时24秒
  • 100封邮件,每封邮件包含12种产品,耗时16秒
  • 所有图像(例如徽标、横幅、产品)都是文本,用于调用服务器上承载图像的URL)

    考虑到我只为每个产品添加了几KB,我觉得时间的增长(100封电子邮件从16秒增加到24秒)是巨大的。如果这种情况只发送100封电子邮件,那么发送数千封电子邮件在完成发送的时间和性能方面的影响将非常大。我的代码使用以下内容:

    ....
    require_once "/.../ea-php70/root/usr/share/pear/Mail.php";
    $params['sendmail_path'] = '/usr/lib/sendmail';
    $mail_object =& Mail::factory('sendmail', $params);
    $timeoutSet = set_time_limit(18000); // set script time out to 5 hours 
    ...
    for ($i = 1; $i <= 100; $i++) {
        ...
        $_mail = $mail_object->send($recipients, $headers, $sendContent); 
        ....
    }
    ....
    
    。。。。
    需要_once“/…/ea-php70/root/usr/share/pear/Mail.php”;
    $params['sendmail_path']='/usr/lib/sendmail';
    $mail_object=&mail::factory('sendmail',$params);
    $TIMEOINTER=设置时间限制(18000);//将脚本超时设置为5小时
    ...
    对于($i=1;$i发送($recipients,$headers,$sendContent);
    ....
    }
    ....
    
    如何使我的PEAR::Mail实现更快地发送批量电子邮件?我怀疑可能是我的服务器正在限制电子邮件,或者我需要更改一些PEAR::Mail设置,或者可能使用SMTP而不是Sendmail。有什么想法吗?谢谢

    更新1:


    我有一个8核、16线程的处理器。我做的一件事是从web浏览器的不同选项卡并行运行我的脚本,例如,发送8000封电子邮件不需要4分钟,而只需要1分钟,因为我分4批发送,每个批2000封电子邮件,以4个并行和独立的方式同时运行脚本进程。我正在尝试寻找其他方法来加速这项CPU密集型任务,我想知道
    PEAR::Mail
    是否有一些设置可以修改以更快地发送电子邮件。

    我不相信瓶颈在实际发送中,但在如何编写消息中,但所有用于内容生成的相关代码都丢失了你应该做更多的分析,以确保。你可以考虑分批发送,使用或similar@msg我更新了问题中的代码,显示了我如何使用($I=1;$I send($recipients,$headers,$sendContent)的
    它仍然会很慢,因为消耗时间的是我的内容生成,而不是PEAR::Mail?是的,如果你正在与数据库交互以进行邮件定制、检索产品等。我敢打赌这就是你的瓶颈所在。你必须分析代码的每个部分才能确定。@msg我测试了一个d问题肯定不是我编写消息的方式。如果我在代码中不调用
    $\u mail=$mail\u object->send($recipients,$headers,$sendContent);
    ,只需几秒钟就可以执行数千次从数据库检索内容的迭代。问题是调用
    $\u mail=$mail\u object->send($recipients,$headers,$sendContent)然后,它会变慢。我不相信瓶颈是在实际的发送中,而是在如何编写消息的过程中,但是所有有关内容生成的代码都不见了。你应该做更多的分析来确定。你可以考虑使用分批发送,使用或类似。r@msg我更新了问题中的代码,显示了我如何使用($I=1;$I send($recipients,$headers,$sendContent)的
    它仍然会很慢,因为消耗时间的是我的内容生成,而不是PEAR::Mail
    ?是的,如果你正在与数据库交互以进行邮件定制、检索产品等。我敢打赌这就是你的瓶颈所在。你必须分析代码的每个部分才能确定。@msg我测试了一个d问题肯定不是我编写消息的方式。如果我在代码中不调用
    $\u mail=$mail\u object->send($recipients,$headers,$sendContent);
    ,只需几秒钟就可以执行数千次从数据库检索内容的迭代。问题是调用
    $\u mail=$mail\u object->send($recipients,$headers,$sendContent);
    为数千次迭代中的每一次发送内容。然后它会变慢。