首页 > 解决方案 > 无法从 PHPMailer 作曲家创建 PHPMailer 对象实例

问题描述

嗨,我目前正在开发一个包含忘记密码系统的项目。我决定使用 PHPMailer 向用户发送重置密码电子邮件,并通过 Composer 安装它,它现在位于供应商文件夹中。但是,在执行示例代码后,PHP 会抛出错误:

Notice: Undefined variable: mail in /opt/lampp/htdocs/capstone-admin/process/loginFunctions.php on line 98

Fatal error: Uncaught Error: Call to a member function isSMTP() on null in /opt/lampp/htdocs/capstone-admin/process/loginFunctions.php:98 Stack trace: #0 {main} thrown in /opt/lampp/htdocs/capstone-admin/process/loginFunctions.php on line 98

这是我在 loginFunctions.php 中的一部分代码:

<?php 
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\SMTP;
    use PHPMailer\PHPMailer\Exception;

    require __DIR__. '/../vendor/autoload.php';
    $mail = new PHPMailer();
    $mail->isSMTP();
    $mail->SMTPAuth = true;
    $mail->SMTPSecure = 'ssl';
    // More codes ......
?>

我的目录结构是:

目录结构

更新

  1. 我尝试搜索有关错误的常见堆栈溢出问题,甚至浏览 youtube 视频,但到目前为止还没有运气!任何帮助将不胜感激

  2. 感谢评论的帮助,但不幸的是到目前为止还没有运气

  3. 我提供了一个 imgur 图像,显示了 $mail = new PHPMailer();发生后的调试屏幕截图:

截屏

标签: phpcomposer-phpphpmailer

解决方案


假设它是正确的vendor/autoload.php(见内联注释):

  • 它读取new PHPMailer而不是new PHPMailer()- 不像上面的代码片段。

  • $mailÂ看起来也很奇怪,虽然$mail是未知数。$mail和之间可能有一些不可见的控制字符=。如果它倾倒了一些东西,那么很可能var_dump($mailÂ);

如果不是这样,那么...

为了抛出/捕获异常,构造如下:

<?php
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\SMTP;
    use PHPMailer\PHPMailer\Exception;

    // relative vs. absolute path sometimes make a difference.
    require __DIR__. '/../vendor/autoload.php';
    // require '../vendor/autoload.php';

    try {
        $mail = new PHPMailer(true);
        $mail->isSMTP();
        $mail->SMTPAuth = true;
        $mail->SMTPSecure = 'ssl';
    } catch (Exception $e) {
        die($e->getMessage());
    }
?>

推荐阅读