无法声明 class PHPMailer\PHPMailer\Exception,因为该名称已被使用

Cannot declare class PHPMailer\PHPMailer\Exception, because the name is already in use

错误: Cannot declare class PHPMailer\PHPMailer\Exception, because the name is already in use.

下面是正在使用的代码

 require '/home3/afaflawm/vendor/phpmailer/phpmailer/src/Exception.php';
require '/home3/afaflawm/vendor/phpmailer/phpmailer/src/PHPMailer.php';
require '/home3/afaflawm/vendor/phpmailer/phpmailer/src/SMTP.php';
// Load Composer's autoloader
 require 'vendor/autoload.php';
   use PHPMailer\PHPMailer\PHPMailer;
 use PHPMailer\PHPMailer\SMTP;
 use PHPMailer\PHPMailer\Exception;
   function SendSMTPemail(){
  try {
 $mail = new PHPMailer(true);
  $mail->SMTPDebug = SMTP::DEBUG_SERVER;  
    $mail->Host='ssl';
       $mail->isSMTP();                                            
    $mail->SMTPAuth   = true;                                   
     $mail->Username='xy@xy.com'; 
    $mail->Password='xxxxxxx'; 
       $mail->setFrom('xy@xy.com');
       $mail->AddAddress('yz@yz.com');                             // SMTP password
    $mail->SMTPSecure = 'ssl';
    $mail->Port       = 465;                                    // TCP port to connect to
    $mail->addReplyTo('ab@ab.com', 'Information');
        $mail->isHTML(true);  
   $mail->Subject = "Appointment Details";
    $mail->Body    = "Dear, <br> Please be informed that you have an appointment  tommorow   <br>      Regards <br> ";
    $mail->AltBody = '';
   if(!$mail->Send()) {
           echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
         echo "Message sent!";
    }
     //echo "success";
        // $globals['emailstatus'] =true;
        // header("Location: sendEmail.php");
   } catch (Exception $e) {
       //echo "fail";
           // $globals['emailstatus'] =false;
    echo "Message could not be sent.";
   }
     }
   SendSMTPemail();

如果以下代码行被注释,

   require '/home3/afaflawm/vendor/phpmailer/phpmailer/src/Exception.php';
   require '/home3/afaflawm/vendor/phpmailer/phpmailer/src/PHPMailer.php';
   require '/home3/afaflawm/vendor/phpmailer/phpmailer/src/SMTP.php';

然后显示如下错误:

   Uncaught Error: Class 'PHPMailer\PHPMailer\SMTP' not found 

如果以下代码行被注释,

   use PHPMailer\PHPMailer\PHPMailer;
   use PHPMailer\PHPMailer\SMTP;
   use PHPMailer\PHPMailer\Exception;

然后显示如下错误:

     Cannot declare class PHPMailer\PHPMailer\Exception, because the name is already in use 

以下是目录及其位置:

我曾经使用过 PHPMailer,之前使用 Gmail 的 SMTP,效果很好。有人可以帮助解释为什么显示此错误,尽管所需的文件位于正确的目录中吗?

调查结果(编辑) 我意识到 wp_content 文件夹和 wp_includes 中也有一个 PHPMailer 文件夹。很久以前,当我使用用于 gmail 的 PHPmailer 时,我已经将 PHPMailer 文件夹上传到 wp_content。我在文件中有这个文件夹的多个副本。一个在 vendor 文件夹的根目录中,由 composer 和其他人在 wp_content 和 wp_includes 中创建。 wp_includes 很奇怪,因为我不知道是作曲家创作的还是什么..我该怎么办。我只想使用 wp_content 中的那个,因为当我使用 gmail SMTP @Synchro

使用它时它工作正常

我保留了前两行注释,而 SMTP 的第三行未注释,它开始工作了

  //require '/home3/afaflawm/vendor/phpmailer/phpmailer/src/Exception.php';
  //require '/home3/afaflawm/vendor/phpmailer/phpmailer/src/PHPMailer.php';
  require '/home3/afaflawm/vendor/phpmailer/phpmailer/src/SMTP.php';

所以问题是由前两个 require 语句引起的,因为它们已经由作曲家在此行加载 require 'vendor/autoload.php' 除了 SMTP。因此,当我尝试一次评论所有三行并分别作曲时,两种情况都显示错误

试试

if (!class_exists('PHPMailer\PHPMailer\Exception'))
{
  require '/home3/afaflawm/vendor/phpmailer/phpmailer/src/Exception.php';
  require '/home3/afaflawm/vendor/phpmailer/phpmailer/src/PHPMailer.php';
  require '/home3/afaflawm/vendor/phpmailer/phpmailer/src/SMTP.php';
}

根据@Far 的发现,答案是:

require_once ABSPATH . 'wp- 
includes/PHPMailer/Exception.php';
require_once ABSPATH . 'wp-includes/PHPMailer/PHPMailer.php';
require_once ABSPATH . 'wp-includes/PHPMailer/SMTP.php';