使用gmail发送phpmailer smtp电子邮件需要很长时间(1.5秒)

时间:2014-12-18 17:24:01

标签: php email smtp gmail phpmailer

以下脚本需要大约1.5秒的时间来发送电子邮件,这是由$mail->send()行上的计时器测量的。如果我不使用smtp,它会更快,但是,一些邮件服务器将阻止收到的电子邮件。

造成延误的原因是什么?如果没有什么可以做的,那么阻止用户等待它的好方法是什么?

<?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 = "example@gmail.com";
        $this->Password = "my_password";
    }
}

try {
    $mail = new myPHPMailer(true);
    $mail->AddReplyTo('me@example.com');
    $mail->SetFrom('me@example.com');
    $mail->AddAddress('me@example.com', '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 个答案:

答案 0 :(得分:3)

当您在PHPMailer中使用isMail()isSendmail()传输选项时,它不会立即发送消息,而是将其提交到您的本地邮件服务器,从而释放您的Web应用并发送消息闲暇时。这通常不会产生网络开销,没有加密或身份验证,如果它是一个低流量的服务器,它可能正在做很少的事情,并且可以非常快地接受消息。

SMTP从未真正意图以交互方式使用,即在提交网页期间,它确实需要很长时间。这是一个复杂的协议,有许多往返和可能出现延迟的点,特别是灰色列表的可能性,问候延迟,立即垃圾邮件过滤等等。

如果您想使用SMTP并使其速度更快,请使用附近的邮件服务器(甚至是localhost)作为不需要加密或身份验证的中继,并且不对出站邮件应用垃圾邮件过滤。

答案 1 :(得分:3)

而不是使用它:

$mail->IsSMTP();

使用此:

$mail->IsMail();

我遇到同样的问题,SMTP真的可以让你失望。