【问题标题】:PHPMailer Classes - How to download the latest stable version from GitHub without ComposerPHPMailer 类 - 如何在没有 Composer 的情况下从 GitHub 下载最新的稳定版本
【发布时间】:2018-12-16 01:41:50
【问题描述】:

我的任务是将当前实现的 PHPMailer 版本 5.2.4 类升级到这些类的最新稳定版本,用于从 PHP 5.6 迁移到 PHP 7.2 的电子商务 Web 应用程序。

该站点多年来一直使用 PHPMailer 版本 5.2.4 及其相关类而不使用 Composer 来生成通过第 3 方 SMTP 电子邮件提供商发送的交易电子邮件。

我想将 PHPMailer 5.2.4 类升级到最新的稳定版本,并继续使用代码中的类而不通过 Composer 部署它们。

我知道从 PHPMailer 6.0 版开始,需要将命名空间添加到代码中。

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

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

我去了GitHub上的PHPMailer项目,从GitHub Master Branch下载了以下文件:

https://github.com/PHPMailer/PHPMailer/tree/master/src

src/PHPMailer.php
src/Exception.php
src/SMTP.php

我在使用这些类的现有代码中添加了必要的命名空间;我还更新了我现有的异常处理代码,该代码以前捕获 phpmailerException 类型的异常,现在使用 PHPMailer 异常类命名空间,并且任何现有的异常引用都使用全局命名空间;

...
try {
...
} catch (Exception $e) {
     //$e is an instance of PHPMailer\PHPMailer\Exception
    echo $e->errorMessage();
} catch (\Exception $e) {
    //$e is an instance of the PHP built-in Exception class
    echo $e->getMessage();
}

进行这些更新后,一切正常,可以在我运行 PHP 7.2 版的开发环境中生成电子邮件。

我已准备好将更新部署到我网站的生产/实时服务器,并想确认我已使用 PHPMailer 类的最新稳定完整测试版本。

我只是有一个有点愚蠢的问题/担忧:

在不使用 Composer 的情况下使用 PHPMailer 类时,我阅读了几个教程以从 PHPMailer GitHub 项目的 Master Branch src 下载这些类。

不过,我也阅读了一些使用 PHPMailer 6.0 版的教程。另外,我好像记得在某处读到过,master 分支并不能保证是稳定的。

我的问题: 如果我想要这些类的最新稳定完整测试版本,我使用 GitHub Master Branch src 下载 PHPMailer 类以在我的网站中使用是否正确?

或者,我应该使用 GitHub 6.0 Branch src 下载这些类文件吗?

让我更加困惑的是,我发现唯一被特别标记为“稳定”的分支是 GitHub“5.2 稳定”分支,其最新版本是 5.2.27。

关于相关说明,请您在 Master 分支中澄清以下内容:

**src/SMTP.php**  
(has const VERSION = '6.0.6';)    

**src/Exception.php**  
Is there a reason that comments or code in this file does not mention Version 6.0.6?

**src/PHPMailer.php**  
Is there a reason that comments or code in this file does not mention Version 6.0.6?  

非常感谢您的帮助。

【问题讨论】:

    标签: git phpmailer php-7.2


    【解决方案1】:

    这是我的问题!

    在将 PHPMailer 从 5 升级到 6 时寻找答案的最终位置是 UPGRADING doc,以及我专门针对这种情况编写的 this question

    是的,这三个文件是基本邮件发送所需的全部内容。只有当您使用 Oauth 时,Composer 才会变得更加重要,因为 Oauth 会引入大量依赖项。

    事后看来,我应该调用 stable 分支 legacy 以更清楚地表明它已被弃用。所有版本的 PHP 5 现在都已停产,因此不应再使用该分支。

    版本属性在 6 中更改为常量,因为它们显然是常量! TBH 它们主要在发布期间令人讨厌。主类和 VERSION 文件是现在唯一包含版本字符串的类(它们都包含一个?)。在大多数情况下,版本号应该只对作曲家感兴趣。异常类只是不够有趣,不足以保证有一个。

    master 分支的 HEAD 确实可能不稳定,但标记的版本来自那里,应该被认为是稳定的。同样,如果您使用 Composer,这会自动发生。我不建议直接从 HEAD 部署版本,但同样,这就是你应该使用 composer 的原因。即使您不想在安装时运行 composer,或者在部署时无法运行它(例如,您的用户在共享主机上),您也应该在本地构建安装包时使用它,以便 composer 可以处理给你。

    如果您还没有从中弄清楚,使用 composer 确实是阻力最小的路径,并且消除了很多复杂性;你可能再也不需要写另一个include/require 语句了。

    【讨论】:

    • 谢谢@Synchro 你已经解决了我的困惑。我已经成功地将 PHPMailer 的标记发布版本 6.0.6 及其相关类部署到我在 PHP 7.2 上运行的生产应用程序中,并且一切正常。
    最近更新 更多