PHP代码在cPanel中实例化新的PHPMailer类时中断

问题描述 投票:0回答:2

我正在尝试使用PHPMailer发送电子邮件,并且正在通过Bluehost在cPanel中编写PHP。下面是到目前为止的代码。该文件与src文件夹一起位于PHPMailermaster文件夹中。

代码到达“ new PHPMailer”行后失败(因此,当我运行它时,页面将回显“ Reached checkpoint 1”,而不是“ Reached checkpoint 2”)。

我以前从未使用过PHP,所以很有可能我在做错PHP,而且似乎所有与此相关的教程都是针对较旧版本的PHPMailer的,因此,我真正需要做的就是他们的GitHub页面。我的代码大部分是从那里复制的,对use路径做了一些修改。我也评论了自动装带器,因为我没有它,而且我不确定它会做什么。

<?php
// Import PHPMailer classes into the global namespace
// These must be at the top of your script, not inside a function
use src\PHPMailer;
use src\SMTP;
use src\Exception;

require 'src/Exception.php';
require 'src/PHPMailer.php';
require 'src/SMTP.php';

// Load Composer's autoloader
// require 'vendor/autoload.php';

echo "Reached checkpoint 1";

// Instantiation and passing `true` enables exceptions
$mail = new PHPMailer(true);

echo "Reached checkpoint 2";

try {
    //Server settings
    $mail->SMTPDebug = 1;                      // Enable verbose debug output
    $mail->isSMTP();                                            // Send using SMTP
    $mail->Host       = 'smtp.gmail.com';                    // Set the SMTP server to send through
    $mail->SMTPAuth   = true;                                   // Enable SMTP authentication
    $mail->Username   = '<my username>';                     // SMTP username
    $mail->Password   = '<my password>';                               // SMTP password
    $mail->SMTPSecure = 'ssl';         // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` also accepted
    $mail->Port       = 465;                                    // TCP port to connect to

    //Recipients
    $mail->setFrom('<my email>@gmail.com');
    $mail->addAddress('<test email>@gmail.com');     // Add a recipient
    // Content
    $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

    $mail->send();
    echo 'Message has been sent';
} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}

引发以下错误(adminusername只是我的cpanel用户名的占位符:]

Fatal error: Uncaught Error: Class 'src\PHPMailer' not found in /home1/<adminusername>/public_html/PHPMailermaster/mail.php:21 Stack trace: #0 {main} thrown in /home1/<adminusername>/public_html/PHPMailermaster/mail.php on line 21
php phpmailer cpanel
2个回答
0
投票

检查“ src / PHPMailer.php”文件中的“命名空间”子句。 PHPMailer类可能不在src名称空间中。

您现在应该使用composer进行安装,此后,取消注释require 'vendor/autoload.php';行,并使用类似以下内容:

use PHPMailer\PHPMailer\PHPMailer;

require 'vendor/autoload.php';

$mail = new PHPMailer(true);

https://github.com/PHPMailer/PHPMailer中的更多信息


0
投票

我相信我已经解决了这个问题。要在没有Composer的情况下使用PHPMailer,我创建了一个include_directory,将PHPMailermaster文件夹放在其中,然后使用this方法将其添加到php.ini中。我像这样导入了必要的类文件:

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\SMTP;
require '../include_directory/PHPMailermaster/src/Exception.php';
require '../include_directory/PHPMailermaster/src/PHPMailer.php';
require '../include_directory/PHPMailermaster/src/SMTP.php';

而且有效。我认为问题是我如何导入和组织文件。

© www.soinside.com 2019 - 2024. All rights reserved.