使用phpmailer smtp发送邮件的最快方式?

Bad*_*dal 1 php email phpmailer

我正在使用以下phpmailer函数发送1000多封邮件

<?php
function sendMail($sendTo,$Subject,$Body){

    require_once 'PHPMailer/PHPMailerAutoload.php';

    $mail = new PHPMailer;
    $mail->isSMTP();                                      
    $mail->Host = 'smtp.example.com;smtp.example.com';  
    $mail->SMTPAuth = true;                               
    $mail->Username = 'newsletter@example.com';           
    $mail->Password = 'password';                         
    $mail->SMTPSecure = 'ssl';                            
    $mail->Port = 465;                                    
    $mail->From = 'newsletter@example.com';
    $mail->FromName = 'xyz';
    $mail->WordWrap = 50;                                 
    $mail->isHTML(true);                                  

    $mail->addAddress($sendTo);               
    $mail->Subject = $Subject;
    $mail->Body = ( stripslashes( $Body ) );
    $mail->AltBody = 'Please Use a Html email Client To view This Message!!';

    if(!$mail->send()) {
        $return = 'Message could not be sent.';
        // echo 'Mailer Error: ' . $mail->ErrorInfo;
    } else {
        $return = 'Message has been sent!';
    }
    return $return;
}
Run Code Online (Sandbox Code Playgroud)

这是我用来调用函数的代码

foreach ($emails as $email) {
 $subject = "sample subject";
 $body = "sample body";
 sendMail($email, $subject, $body);
}
Run Code Online (Sandbox Code Playgroud)

$ emails数组的大小是1000+是否有更快更好的方法来做到这一点?

Syn*_*hro 10

您应该首先阅读PHPMailer提供的文档,您将在此处找到此示例.

特别要注意的是,请确保使用SMTPKeepAlive- 您可能会发现按域排序列表以最大化连接重用的好处.

正如zerkms所说,您应该提交给本地邮件服务器以获得最佳性能,但令人惊讶的是,PHPMailer中的使用mailsendmail选项并不总是比SMTP更快到本地主机,主要是因为后缀'sendmail二进制文件打开了与localhost的同步SMTP连接 - postfix'docs出于这个原因,建议将SMTP发送到localhost以获得最佳性能.

如果您要发送到localhost,请不要使用auth或加密,因为开销不会为您带来任何好处,但如果您使用的是远程服务器,请使用端口587上的tls优先于端口465上的过时ssl.

通常,应避免直接向最终用户发送 - PHPMailer中的SMTP客户端有些愚蠢 - 它根本不处理排队,因此任何具有灰名单或交付延迟以进行流量控制的域都将无法交付.最好的方法是使用SMTP到附近的MTA并将队列处理留给它.您也可以从中退回,这样您就可以从列表中删除错误的地址.