致命错误:类';PHPMailer\PHPMailer\Exception';在C:\wamp\www\scaffold\PHPMailer master\src\PHPMailer.php第1943行中找不到

致命错误:类';PHPMailer\PHPMailer\Exception';在C:\wamp\www\scaffold\PHPMailer master\src\PHPMailer.php第1943行中找不到,php,html,Php,Html,我一直在尝试设置一个smtp邮件程序,这样一旦用户在我的网站上填写表单,它就会自动通过电子邮件将消息发送给我。我把PHPmailer的所有文件都放在同一个目录中,但每当提交表单时,它总是给我上述错误 这是PHPmailer.php的第1943行: throw new Exception($this->lang('authenticate')); 有人知道问题出在哪里吗 谢谢。将代码更改为:抛出新\异常($this->lang('authenticate') 或添加 使用异常到文件的顶部

我一直在尝试设置一个smtp邮件程序,这样一旦用户在我的网站上填写表单,它就会自动通过电子邮件将消息发送给我。我把PHPmailer的所有文件都放在同一个目录中,但每当提交表单时,它总是给我上述错误

这是PHPmailer.php的第1943行:

throw new Exception($this->lang('authenticate'));
有人知道问题出在哪里吗


谢谢。

将代码更改为:
抛出新\异常($this->lang('authenticate')
或添加
使用异常到文件的顶部


问题是您正在编辑的文件位于
名称空间PHPMailer\PHPMailer中
这意味着当您抛出异常时,它希望类位于同一命名空间中。

将代码更改为:
throw new\Exception($this->lang('authenticate')
或添加
使用异常到文件的顶部


问题是您正在编辑的文件位于
名称空间PHPMailer\PHPMailer中,这意味着当您抛出异常时,它希望该类位于同一命名空间中。

您尚未将该类导入到您的命名空间中

如果不这样做,它将期望类具有名称空间。没有

有两种解决办法。添加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语句,或提供完全限定的类名:

<?php

namespace Random;

use Exception;

class Whatever
{
    public function whatever()
    {
        throw new Exception();
    }
}
<?php

namespace Random;

class Whatever
{
    public function whatever()
    {
        throw new \Exception();
    }
}

错误的原因可能是未自动加载类

使用符合PSR的自动加载,您不再需要对所需的每个类文件进行一次
require\u
。现在每个人都用作曲家来实现这一点

安装后,要在项目中开始使用Composer,只需一个
Composer.json
文件。此文件描述项目的依赖项,并且可能还包含其他元数据

{
  "require": {
    "phpmailer/phpmailer": "^6.0"
  }
}
composer安装
将PHPMailer安装到供应商文件夹中

在应用程序的index.php中,只需添加
require_once'vendor/autoload.php


现在,所有类都将加载,而无需输入它们,您的错误将消失

错误的原因可能是您的类没有自动加载

使用符合PSR的自动加载,您不再需要对所需的每个类文件进行一次
require\u
。现在每个人都用作曲家来实现这一点

安装后,要在项目中开始使用Composer,只需一个
Composer.json
文件。此文件描述项目的依赖项,并且可能还包含其他元数据

{
  "require": {
    "phpmailer/phpmailer": "^6.0"
  }
}
composer安装
将PHPMailer安装到供应商文件夹中

在应用程序的index.php中,只需添加
require_once'vendor/autoload.php


现在,所有类都将加载,而无需输入它们,您的错误将消失

另一个名为exception.php的文件中已经包含一个名称空间,如下所示:namespace PHPMailer\PHPMailer;类异常扩展了\Exception{public function errorMessage(){return''.htmlspecialchars($this->getMessage())。“
\n”;}}我可以只放require'Exception.php'吗;在文件的顶部?你是否使用类自动加载程序,如composer?不,我应该吗?目前我只需要以下文件:require(“PHPMailer master/src/PHPMailer.php”);要求(“PHPMailer master/src/SMTP.php”);然后您需要要求每个类,包括异常和PHPMailer可能使用的每个其他类。请参阅我关于自动加载的其他答案。这是前进的道路!!好的,我需要6.0吗,因为那不是我的版本?另一个名为exception.php的文件中已经包含一个名称空间,如下所示:namespace PHPMailer\PHPMailer;类异常扩展了\Exception{public function errorMessage(){return''.htmlspecialchars($this->getMessage())。“
\n”;}}我可以只放require'Exception.php'吗;在文件的顶部?你是否使用类自动加载程序,如composer?不,我应该吗?目前我只需要以下文件:require(“PHPMailer master/src/PHPMailer.php”);要求(“PHPMailer master/src/SMTP.php”);然后您需要要求每个类,包括异常和PHPMailer可能使用的每个其他类。请参阅我关于自动加载的其他答案。这是前进的道路!!好的,我需要6.0版本吗?因为那不是我的版本,“每个人都使用Composer”。并非所有人都关心大型生产环境中的服务器安全性和完整性。我总是不厌其烦地制作一个干净的自动加载器,这样我就不必处理
composer
这类垃圾。你永远不应该在生产环境中运行composer可执行文件。它甚至不应该被安装。您可以使用composer在本地使用的库中进行请求,然后将这些文件复制到服务器。那么你只需要给自动装弹机打电话。因此,我认为你的“安全性和完整性”观点没有任何分量。“每个人都使用Composer”。并非所有人都关心大型生产环境中的服务器安全性和完整性。我总是不厌其烦地制作一个干净的自动加载器,这样我就不必处理
composer
这类垃圾。你永远不应该在生产环境中运行composer可执行文件。它甚至不应该被安装。您可以使用composer在本地使用的库中进行请求,然后将这些文件复制到服务器。那么你只需要给自动装弹机打电话。所以我看不出你的“安全性和完整性”有什么重要性。