我一直在尝试设置一个smtp邮件程序,以便一旦用户在我的网站上填写表格,它将自动通过电子邮件将邮件发送给我。我将PHPmailer的所有文件都放在同一目录中,但是每当提交表单时,它都会不断给我上述错误。
这是PHPmailer.php的1943行:
throw new Exception($this->lang('authenticate'));
有人知道是什么问题吗?
谢谢。
答案 0 :(得分:2)
您尚未将类导入您的名称空间。
如果您不这样做,它将期望该类具有名称空间。不是。
有两种解决方案。添加一个use语句,或提供完全限定的类名称:
<?php
namespace Random;
use Exception;
class Whatever
{
public function whatever()
{
throw new Exception();
}
}
或者,使用完全限定的类名:
<?php
namespace Random;
class Whatever
{
public function whatever()
{
throw new \Exception();
}
}
我更喜欢第一种选择。有些类具有很长的全限定名,因此在代码中说use Ridiculously\Long\Fully\Qualified\ClassName;
然后仅引用ClassName
更容易。否则,您需要说出new \Ridiculously\Long\Fully\Qualified\ClassName()
,这很糟糕。
第一种方法的另一个优点是,您可以立即看到代码中使用的每个类。
答案 1 :(得分:0)
可以将代码更改为:throw new \Exception($this->lang('authenticate'));
或添加
use Exception;
位于文件顶部。
问题是您正在编辑的文件位于namespace PHPMailer\PHPMailer;
中,这意味着当您引发Exception时,它期望该类位于同一名称空间中。
答案 2 :(得分:0)
发生错误的原因可能是您的类没有被自动加载。
借助符合PSR的自动加载功能,您不再需要require_once
所需的每个类文件。如今,每个人都使用Composer来实现这一目标。 https://getcomposer.org/
要在安装后的项目中开始使用Composer,您只需要一个composer.json
文件。该文件描述了项目的依赖关系,并且可能还包含其他元数据。
{
"require": {
"phpmailer/phpmailer": "^6.0"
}
}
composer install
将PHPMailer安装到供应商文件夹中。
在您应用的index.php中,只需添加require_once 'vendor/autoload.php;
现在所有类都将加载而无需要求它们,并且您的错误将消失!