【发布时间】:2018-06-16 03:39:20
【问题描述】:
我想将最新的 PHPMailer 库与 require_once() 一起使用,而不是使用 Composer。我想要一个简单的纯 xcopy 部署。
这是我正在尝试做的事情:
require_once("src/PHPMailer.php");
$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 2;
$mail->Host = "smtp.gmail.com";
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = $smtpUsername;
$mail->Password = $smtpPassword;
$mail->setFrom($emailFrom, $emailFromName);
$mail->addAddress($emailTo, $emailToName);
$mail->Subject = 'PHPMailer GMail SMTP test';
$mail->msgHTML("test body");
$mail->AltBody = 'HTML messaging not supported';
if(!$mail->send()){
echo "Mailer Error: " . $mail->ErrorInfo;
}else{
echo "Message sent!";
}
我收到错误消息:Fatal error: Class PHPMailer not found in [....]\EmailTester.php on line 21
第 21 行是这样的:$mail = new PHPMailer;
这一行只是我的猜测:require_once("src/PHPMailer.php"); - 显然我需要包含一些文件,但我不知道是哪个。
我正在使用gmail example on github 工作,它也不包含在 zip 下载中。但我可以在 github 中导航到它。在该示例文件中,它的开头是这样的:
use PHPMailer\PHPMailer\PHPMailer;
require '../vendor/autoload.php';
$mail = new PHPMailer;
我在 zip 下载中没有看到 autoload.php 文件,在谷歌搜索后我发现这意味着使用 Composer。但是必须有一些方法可以简单地进行包含并获取我需要的文件。
关于这个 PHPMailer 库和一般的 github 有几件事让我感到困惑:
- 当我从 GitHub 下载 PHP Mailer 时,为什么下载的 zip 文件中没有包含这么多列出的文件和文件夹?
- 为什么他们引用的
autoload.php在 zip 下载中不存在? - 显然我对github的一些事情不太了解,但是为什么不提供一个工作代码示例而不是引用下载中不存在的依赖项,迫使人们在其他地方找到它并希望他们能弄清楚如何来返回并正确插入?
- 在这个标题为 Send Emails with PHP & Gmail 的 YouTube 视频中,他从同一个地方下载了我下载的同一个 zip,但他的 zip 包含不同的文件,包括
PHPMailerAutoload.php。为什么我得到的文件与他得到的完全不同?该视频发布于 2017 年 3 月 4 日——也就是说,不到一年前——从那时起它真的发生了很大变化吗?
总而言之:我怎样才能让 PHPMailer 在没有外部依赖项和安装(例如 Composer)的情况下工作,而是使用 require_once() 来获得我需要的东西?
【问题讨论】:
-
github.com/PHPMailer/PHPMailer 有关于如何在没有作曲家的情况下使用它的明确说明。 “或者,如果您不使用 composer,请将 PHPMailer 文件夹的内容复制到 PHP 配置中指定的 include_path 目录之一,并手动加载每个类文件:[...]”
-
另外,在那个页面上也说,“如果你不会说 git 或者只是想要一个 tarball,请单击 GitHub 中项目页面右侧的 'zip' 按钮,但请注意文档和示例不包含在 tarball 中。”
-
CBroe 是完全正确的。您缺少的另一件事是命名空间支持 - 您仍然需要那些
use语句,这就是导致找不到类错误的原因。 -
专注于使用 composer 的一般原因是它是如此巨大的胜利。即使在您的简单示例中,它也已经比使用 composer 更复杂。许多人抱怨 tar 包包含太多用于生产的文件,因此使用 git config 选项排除了文档和示例。
-
作曲家应该下地狱!