您好,我目前正在研究一个包含忘记密码系统的项目。我决定使用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 ......
?>
我的目录结构是:
更新
我尝试搜索有关该错误的常见堆栈溢出问题,甚至浏览youtube视频,但到目前为止还没有运气!任何帮助将被困几天,将不胜感激
感谢评论提供的帮助,但不幸的是到目前为止还没有运气
我提供了一张imgur图片,显示了之后的调试屏幕截图
发生$mail = new PHPMailer();
:
答案 0 :(得分:1)
假设它是正确的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());
}
?>