为什么phpmailer->;send()返回true,但我不';你没收到电子邮件吗?

为什么phpmailer->;send()返回true,但我不';你没收到电子邮件吗?,php,phpmailer,Php,Phpmailer,以下是我的功能: function send_mail($email_from, $password, $email_to, $subject, $body, $name_from = "Lamtakam"){ $phpMailer = new PHPMailer(true); // $phpMailer->SMTPDebug = true; $phpMailer->isSMTP(); $phpMailer->Host = "smtp.zoho.

以下是我的功能:

function send_mail($email_from, $password, $email_to, $subject, $body, $name_from = "Lamtakam"){
    $phpMailer = new PHPMailer(true);
    // $phpMailer->SMTPDebug = true;
    $phpMailer->isSMTP();
    $phpMailer->Host = "smtp.zoho.com";
    $phpMailer->SMTPAuth = true;
    $phpMailer->Username = $email_from;
    $phpMailer->Password = $password;
    $phpMailer->SMTPSecure = "tls";
    $phpMailer->Port = 587;
    $phpMailer->isHTML(true);
    $phpMailer->CharSet = "UTF-8";
    $phpMailer->setFrom($email_from, $name_from);
    $phpMailer->addAddress($email_to);
    $phpMailer->Subject = $subject;
    $phpMailer->Body = $body;
    return $phpMailer->send();
}
当我在本地使用它(xampp)时,它工作得很好。但是最近我把我的网站上传到了服务器上(linux ubuntu),很遗憾电子邮件没有被发送。实际上,
$phpMailer->send()
返回true,但我既没有收到收件箱中的电子邮件,也没有收到垃圾邮件。为什么以及如何修复它



好的,大约30分钟后,我收到收件箱中的电子邮件。现在我的问题是,这一巨大延迟的原因是什么?

请尝试以下代码,该代码尝试捕获任何phpmailer异常

function send_mail($email_from, $password, $email_to, $subject, $body, $name_from = "Lamtakam"){

    $phpMailer = new PHPMailer(true);

    try {

        $phpMailer->SMTPDebug = 2;
        $phpMailer->isSMTP();
        $phpMailer->Host = "smtp.zoho.com";
        $phpMailer->SMTPAuth = true;
        $phpMailer->Username = $email_from;
        $phpMailer->Password = $password;
        $phpMailer->SMTPSecure = "tls";
        $phpMailer->Port = 587;
        $phpMailer->isHTML(true);
        $phpMailer->CharSet = "UTF-8";
        $phpMailer->setFrom($email_from, $name_from);
        $phpMailer->addAddress($email_to);
        $phpMailer->Subject = $subject;
        $phpMailer->Body = $body;
        $phpMailer->send();

    } catch (phpmailerException $e) {

        die($e->errorMessage());

    }

}

如果无法工作,请与主机检查端口587是否打开

尝试以下代码以捕获任何PHP编译器异常

function send_mail($email_from, $password, $email_to, $subject, $body, $name_from = "Lamtakam"){

    $phpMailer = new PHPMailer(true);

    try {

        $phpMailer->SMTPDebug = 2;
        $phpMailer->isSMTP();
        $phpMailer->Host = "smtp.zoho.com";
        $phpMailer->SMTPAuth = true;
        $phpMailer->Username = $email_from;
        $phpMailer->Password = $password;
        $phpMailer->SMTPSecure = "tls";
        $phpMailer->Port = 587;
        $phpMailer->isHTML(true);
        $phpMailer->CharSet = "UTF-8";
        $phpMailer->setFrom($email_from, $name_from);
        $phpMailer->addAddress($email_to);
        $phpMailer->Subject = $subject;
        $phpMailer->Body = $body;
        $phpMailer->send();

    } catch (phpmailerException $e) {

        die($e->errorMessage());

    }

}
如果它不工作,请与主机检查端口587是否打开

我认为这是非常相关的。简言之,造成延迟的不是PHP,而是SMTP,PHP脚本将邮件传递给SMTP进行传递。SMTP有一些奇怪的行为可能导致这种情况,最常见的是。Greylisting试图通过在处理请求之前多次等待请求来减少垃圾邮件并防止未经验证的电子邮件

如果您想更快地发送邮件,我建议使用API,例如有自己的SMTP服务器的API。API往往更可靠、更快速、更易于使用。一般来说,PHP
mail()
函数的速度很慢,没有办法解决这个问题。

我认为这是非常相关的。简言之,造成延迟的不是PHP,而是SMTP,PHP脚本将邮件传递给SMTP进行传递。SMTP有一些奇怪的行为可能导致这种情况,最常见的是。Greylisting试图通过在处理请求之前多次等待请求来减少垃圾邮件并防止未经验证的电子邮件



如果您想更快地发送邮件,我建议使用API,例如有自己的SMTP服务器的API。API往往更可靠、更快速、更易于使用。一般来说,PHP
mail()
函数速度很慢,没有办法解决这个问题。

“现在我的问题是,造成如此巨大延迟的原因是什么?”您的邮件服务。@fyroc我使用zoho邮件服务。。我不使用自己的服务器邮件服务。对不起。。最大的延迟是发送或接收邮件服务器处理电子邮件的速度慢。SMTP是一种存储转发协议,不提供任何传递保证。接收服务器通常限制传递速度(通过greylisting、greetdelay、延迟、节流、tarpitting等)以控制垃圾邮件和本地资源消耗。想知道发生了什么吗?查看您的邮件服务器日志。“现在我的问题是,造成如此巨大延迟的原因是什么?”您的邮件服务。@fyroc我使用zoho邮件服务。。我不使用自己的服务器邮件服务。对不起。。最大的延迟是发送或接收邮件服务器处理电子邮件的速度慢。SMTP是一种存储转发协议,不提供任何传递保证。接收服务器通常限制传递速度(通过greylisting、greetdelay、延迟、节流、tarpitting等)以控制垃圾邮件和本地资源消耗。想知道发生了什么吗?查看您的邮件服务器日志。我看到,自从我发布此答案后,您已经更新了您的问题。不要在生产中使用我的答案。这只是为了帮助您调试错误。是的,我将添加您在代码中编写的
try catch
。。似乎很适合调试。。谢谢你,upvoteAlright,把模具取下来,也许还有些东西。。。最好的luckDon不会在没有明确解释为什么它能解决问题的情况下发布代码。“它对我有用”不是一个合理的理由。我看到自从我发布这个答案后,你已经更新了你的问题。不要在生产中使用我的答案。这只是为了帮助您调试错误。是的,我将添加您在代码中编写的
try catch
。。似乎很适合调试。。谢谢你,upvoteAlright,把模具取下来,也许还有些东西。。。最好的luckDon不会在没有明确解释为什么它能解决问题的情况下发布代码。“它对我有效”不是一个合理的理由。事实上,在这种情况下,它很可能类似于greylisting,但并不是说
mail()
天生就慢(尽管它比SMTP到本地主机更慢、更不安全),也不是说远程HTTP API会更快。我可以用SMTP每小时向附近的邮件服务器发送超过700k封邮件。据我所知,这在很大程度上取决于web服务器。在这种情况下,它很可能类似于greylisting,但
mail()
本身就很慢(尽管它比SMTP发送到本地主机更慢、更不安全),远程HTTP API也不会更快。我在使用SMTP向附近的邮件服务器发送超过700k封邮件时没有遇到任何问题。据我所知,这在很大程度上取决于web服务器。