代码之家  ›  专栏  ›  技术社区  ›  Zac

phpmailer但没有主机

  •  1
  • Zac  · 技术社区  · 6 年前

    以前我在php中有mail()函数来处理我的站点。现在我们得到了站点的域(nginx服务器),而现在mail()只是不想表现,总是返回false。我为mail()设置了php ini,正确的域为

    所以…我转向了Phpmailer,它仍然不起作用… 我知道这个错误…
    Could not instantiate mail function.

    所以我的问题是怎么回事?我没有SMTP主机…我想使用本地服务器作为邮件服务器,因为它以前是工作的,我相信我有正确的设置。

    与composer一起安装。

    这是我的代码:

        require_once($_SERVER['DOCUMENT_ROOT']."/vendor/phpmailer/phpmailer/src/PHPMailer.php");
            require_once($_SERVER['DOCUMENT_ROOT']."/vendor/phpmailer/phpmailer/src/SMTP.php");
            require_once($_SERVER['DOCUMENT_ROOT']."/vendor/phpmailer/phpmailer/src/Exception.php");
    
            $emailer = new PHPMailer\PHPMailer\PHPMailer();
            $emailer->IsMail();
    
    
    
    $emailer->SetFrom("noreply@my.domain");
                    $emailer->FromName = "My Domain";
                    $emailer->AddAddress($admin_data['email']);
                    $emailer->isHTML(false);
                    $emailer->Subject = "test";
                    $emailer->Body = " test "
    if(!$emailer->send()){
                        give_error("Send Email Error: " . $emailer->ErrorInfo);
                        return false;
                    } 
    
    2 回复  |  直到 6 年前
        1
  •  0
  •   Jonathan LeRoux    6 年前

    当你想知道你的phpmailer驱动的电子邮件为什么不能发送时,一定要打开phpmailer的 "SMTPDebug" 选择权。

    为此,在实例化phpmailer对象之后,将smtpdebug属性设置为“3”。在你的代码中,它看起来像:

    //Echo errors, server responses, client message, data, commands & connection status
    $emailer->SMTPDebug = 3;
    

    这将回显电子邮件在尝试完成发送时可能溢出的所有错误、服务器响应和客户端消息。有了这个,你应该能够更好地处理什么可能导致你的电子邮件误发或根本不发送。

    即使您正在尝试捕获当前的错误,如果不启用此选项,它也无法捕获信息的全部广度和深度。

    不过,请记住,在投入生产之前关闭此选项。将smtpdebug属性设置回0将确保不会向最终用户泄漏错误或重要的服务器信息。

    //Will disable all debugging.
    $emailer->SMTPDebug = 0
    

    您可以在phpmailer文档中找到有关smtpdebug属性的更多信息,该文档可能名为 "PHPMailer-master/docs/" 在你的代码库中。

        2
  •  0
  •   Synchro    6 年前

    按照故障排除指南的链接进行操作。为了 mail() 函数要工作,您需要安装本地邮件服务器-我建议使用postfix。与你的代码无关。

    也就是说,虽然使用本地邮件服务器是一个不错的选择,但是使用smtp到本地主机比使用mail函数更快更安全。有关原因,请参阅phpmailer文档。