首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么phpmailer->send()返回true,但我没有收到电子邮件?

为什么phpmailer->send()返回true,但我没有收到电子邮件?
EN

Stack Overflow用户
提问于 2018-07-12 04:04:06
回答 2查看 1.7K关注 0票数 0

下面是我的函数:

代码语言:javascript
复制
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分钟后,我在收件箱里收到了这封邮件。现在我的问题是,这个巨大的延迟的原因是什么?

EN

回答 2

Stack Overflow用户

发布于 2018-07-12 04:14:48

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

如果你想更快地发送邮件,我推荐使用像Sendgrid这样的应用程序接口,它有自己的SMTP服务器。API往往更可靠、更快速、更易于使用。一般来说,PHP的mail()函数很慢,这是没有办法的。

票数 2
EN

Stack Overflow用户

发布于 2018-07-12 04:11:57

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

代码语言:javascript
复制
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端口

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51293433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档