2016-06-14 13 views
1

私はPHPMailerのチュートリアルといくつかのチュートリアルをインターネットでフォローしていましたが、まだ2秒未満の実行はできません。多くのウェブサイトでは、それは0.4秒以上かかるべきではないと言います。ローカルマシンとAWSマシンから試しました。実行時間は同じです。PHPMailerの実行時間が約2秒

class BatchMailer { 
    private static $mail; 
    private static $initialized = false; 

    private static function initialize() { 
     if (self::$initialized) 
      return; 

     self::$mail = new PHPMailer; 
     self::$mail->SMTPDebug = 2; 
     self::$mail->isSMTP(); 
     self::$mail->Host = 'smtp.gmail.com'; 
     self::$mail->Port = 587; 
     self::$mail->SMTPSecure = 'tls'; 
     self::$mail->SMTPAuth = true; 
     self::$mail->Username = '***'; 
     self::$mail->Password = '***'; 
     self::$mail->SMTPKeepAlive = true; 
     self::$mail->setFrom('***@gmail.com', 'Title'); 
     self::$mail->isHTML(true); 
     self::$mail->AltBody = 'Please use an HTML-enabled email client to view this message.'; 
     self::$initialized = true; 
    } 

    public static function setSubject($subject) { 
     self::initialize(); 
     self::$mail->Subject = $subject; 
    } 

    public static function setBody($body) { 
     self::initialize(); 
     self::$mail->Body = stripslashes($body); 
    } 

    public static function sendTo() { 
     self::initialize(); 
     self::$mail->clearAddresses(); 

     $recipients = array(
      '***@gmail.com' => 'Person One' 
     ); 

     foreach($recipients as $email => $name) { 
      self::$mail->AddCC($email, $name); 
     } 

     self::$mail->send(); 
     return; 
    } 

    static function test() { 
     self::setSubject('subject'); 
     self::setBody('body'); 
     self::sendTo(); 
    } 
} 

答えて

2

SMTPはgreetdelay/tarpittingのようなものがアンチスパム対策として使用されている場合は特に、多くの場合、遅いです。 2秒はそれほど遅くはありません - SMTP仕様では10-20のタイムアウトが可能です!リアルタイム使用、すなわちウェブページの送信には実際には適していませんが、それはそうした方法を使用しようとする多くの人を止めるようには見えません。パフォーマンスを最大限に高めるには、リレーとして使用するローカルメールサーバーをインストールするか、メッセージを非同期の別のプロセスに送信することができます。たとえば、ページから非同期のajaxリクエストを送信してユーザーは他のことをすることを妨げられません。

メールを大量に送信する場合は、送信中にリレーとSMTPキープアライブを使用することが重要です。私はPHPMailerで毎秒200以上のメッセージを維持するのに問題はありません。

素敵なクラスBTW - 私が見ているもののほとんどよりも控えめです! $initializedは必要ありません。代わりにself::$mailが設定されているかどうかを確認してください。

+0

ありがとうございます。 PHPで使用できるローカルのメールサーバをお勧めしますか? – user256968

+0

どんなものでも構いませんが、ポストフィックスはおそらくセットアップが簡単です。他にはexim、sendmail、haraka、qmailがあります。 – Synchro

+1

私はsendgridメールサービスを使用しました。彼らはAPI呼び出しとしてメールを送信するSMTP APIを提供しています。それを試して、それはかなり速いと感じた。 https://sendgrid.com/docs/Integrate/Code_Examples/v2_Mail/php.html – BlackBurn027

関連する問題