我正在尝试使用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
检查“ src / PHPMailer.php”文件中的“命名空间”子句。 PHPMailer
类可能不在src
名称空间中。
您现在应该使用composer进行安装,此后,取消注释require 'vendor/autoload.php';
行,并使用类似以下内容:
use PHPMailer\PHPMailer\PHPMailer;
require 'vendor/autoload.php';
$mail = new PHPMailer(true);
我相信我已经解决了这个问题。要在没有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';
而且有效。我认为问题是我如何导入和组织文件。