【问题标题】:Can't create PHPMailer object instance from PHPMailer composer无法从 PHPMailer 作曲家创建 PHPMailer 对象实例
【发布时间】:2020-04-17 21:09:28
【问题描述】:

您好,我目前正在开展一个项目,其中包含忘记密码系统。我决定使用 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. 感谢 cmets 的帮助,但不幸的是到目前为止没有运气

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

【问题讨论】:

  • @MartinZeitler 对不起,我不明白你的意思。我只是按照phpmailer示例代码
  • @Martin,那些use 陈述是正确的;它们是命名空间别名,而不是文件引用。
  • 那里的代码看起来是正确的——如果你把它切回only那个代码,它可以工作吗?我怀疑您的 loginFunctions.php 文件存在结构性问题。
  • @Synchro 我试着把它放在我的 index.php 中但仍然没有运气,遗憾的是它仍然是同样的错误
  • @Synchro 仍然很明显,new PHPMailer() 没有按预期构造...在构造函数中设置断点可以解释为什么它会这样。此外,new PHPMailer(true) 启用异常。

标签: php composer-php phpmailer


【解决方案1】:

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

  • 它读取 new PHPMailer 而不是 new PHPMailer() - 与上面的代码 sn-p 不同。

  • $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());
    }
?>

【讨论】:

  • 谢谢你们!我终于解决了它确实是一些特殊的隐形字符所以我必须删除并重新输入代码!
猜你喜欢
  • 2019-10-25
  • 2016-04-04
  • 2015-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-06
  • 2015-08-19
  • 2019-03-30
相关资源
最近更新 更多