PHPMailer超时不起作用

4

我使用PHPMailer发送邮件,并希望获得结果,因为频繁地发送邮件。因此,我想使用PHPMailer的“timeout”功能。但是它没有起作用。

我的代码:

        $mail             = new PHPMailer();
    $mail->IsSMTP();
    $mail->Timeout  =   10;
    $mail->SMTPAuth   = true;
    $mail->SMTPKeepAlive = true;
    $mail->SMTPSecure = "ssl";
    $mail->Host       = "smtp.gmail.com";
    $mail->Port       = 465;
    $mail->Username   = "qinqin1920@gmail.com";
    $mail->Password   = "xxxx";
    $mail->From       = "qinqin1920@gmail.com";
    $mail->Subject    = "This is the subject";
    $mail->AltBody    = "test";
    //$mail->WordWrap   = 50; // set word wrap
    $mail->MsgHTML("test233");
    //$mail->AddReplyTo("qinqin1920@gmail.com");
    $mail->AddAddress("xxxx@qq.com");

    $mail->IsHTML(true);

    echo "<br/>".time()."<br/>";
    echo "time out is ".$mail->Timeout."<br/>";
    if(!$mail->Send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
        echo "Message has been";
    }
    echo "<br/>".time()."<br/>";

并且echo是:

1383181520 超时时间为10 消息已发送 1383181534

你能帮我吗?


2
“并且回显是:1383181520,超时时间为10秒,消息已经是1383181534。” - 需要帮忙什么?看起来它正在正常工作。也许时间格式不是你期望的。实际上,你期望什么? - Funk Forty Niner
注意:在更高版本的PHPMailer中,默认的超时时间为300秒=5分钟。我还有一个2014年的版本,其默认超时时间为10分钟。花了一些时间才找到这个问题... - BurninLeo
1个回答

9

文档指出:"var $Timeout = 10设置SMTP服务器超时时间为秒"和"此函数不能与win32版本一起使用"

如果您需要更长的超时时间,只需将其设置为一分钟(60秒左右)。如果您要通过同一SMTP服务器发送多封电子邮件,则保持连接打开可能会有益,但请记得在最后关闭它。

如果您延长了超时时间,请确保还增加脚本的时间限制,或者完全删除它:

<?php
    set_time_limit(0); // remove a time limit if not in safe mode
    // OR
    set_time_limit(120); // set the time limit to 120 seconds

    $mail                = new PHPMailer();
    $mail->IsSMTP();
    $mail->Timeout       =   60; // set the timeout (seconds)
    $mail->SMTPKeepAlive = true; // don't close the connection between messages
    // ...
    // Send email(s)
    $mail->SmtpClose(); // close the connection since it was left open.
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接