2014-12-18 57 views
2

下面的腳本需要約1.5秒,通過橫跨$mail->send()線定時器測量到發送電子郵件。如果我不使用smtp,它會更快,但是,某些郵件服務器會阻止傳入的電子郵件。發送PHPMailer的SMTP電子郵件花費較長的時間(1.5秒)

什麼是造成延遲?如果對此無能爲力,那麼防止用戶不得不等待它的一個很好的解決方案是什麼?

<?php 
require_once ('../../application/classes_3rd/PHPMailer/PHPMailerAutoload.php'); 
class myPHPMailer extends PHPMailer 
{ 
    public function __construct() 
    { 
     $this->isSMTP(); 
     $this->SMTPDebug = 0; 
     $this->Host = 587; 
     $this->Port = "smtp.gmail.com"; 
     $this->SMTPSecure="tls"; 
     $this->SMTPAuth = true; 
     $this->Username = "[email protected]"; 
     $this->Password = "my_password"; 
    } 
} 

try { 
    $mail = new myPHPMailer(true); 
    $mail->AddReplyTo('[email protected]'); 
    $mail->SetFrom('[email protected]'); 
    $mail->AddAddress('[email protected]', 'John Doe'); 
    $mail->Subject = "My subject"; 
    $mail->MsgHTML("Hello! Click this link https://www.google.com/"); 
    $time=microtime(1); 
    $mail->Send(); 
    echo(microtime(1)-$time); 
} catch (phpmailerException $e) { 
    trigger_error($e->errorMessage(), E_USER_ERROR); 
} 

?> 

回答

2

當您使用的PHPMailer的isMail()isSendmail()的交通選擇,它不會立即發送消息,而是將其提交給本地郵件服務器,它可以釋放你的web應用程序,並在其休閒發送消息。這通常不會導致網絡開銷,無需加密或身份驗證,並且如果它是低流量的服務器,則可能沒有其他功能,並且可以很快接受消息。

SMTP從來沒有真正的意思提交網頁的過程中,即交互使用,而且它的確能需要很長的時間。這是一個複雜的協議,包含許多往返時間和點數,特別是可能出現灰名單,迎接延遲,即時垃圾郵件過濾等等。

如果你想使用SMTP並使其速度快,使用附近的一個郵件服務器(即使本地主機)作爲不需要加密或認證,並在出站郵件不適垃圾郵件過濾的繼電器。

2

,而不是使用這樣的:

$mail->IsSMTP(); 

使用此:

$mail->IsMail(); 

我是同樣的問題,SMTP可以真正減慢你的速度。

+0

PHP Mailer不會保留SMTP,它將成爲正常的PHP郵件功能,您可以檢查已發送的郵件,並且可以查看郵件源中的gmail登錄簽名。所以如果你想使用SMTP,那麼不要使用$ mail-> IsMail(); –