定义
PHPMailer 是一套面向 PHP 语言的电子邮件创建与传输类,主要用途是把 Web 服务器上生成的邮件通过 SMTP 协议投递给邮件服务器。[1] 它以类库形式提供,开发者通过实例化对象并设置服务器地址、账号、收件人和正文等属性来完成发信。[3] 与 PHP 内置的 mail() 函数相比,它额外提供了加密、认证、HTML 邮件和附件等常见能力的封装。
原理
该类库的核心是一个内置的 SMTP 客户端。当脚本调用发送方法时,PHPMailer 会与指定的 SMTP 服务器建立 TCP 连接,按 SMTP 协议完成握手、身份验证、信封声明、数据传输等步骤,最后把邮件内容交给服务器转发。[2] 服务器地址、端口和加密方式由开发者配置,隐式 TLS 与 STARTTLS 两种传输方式都受支持。[3]
因为 PHP 的 mail() 通常依赖本地 sendmail 程序,在缺少本地邮件服务器的平台上无法直接工作,而内置 SMTP 客户端使得各类操作系统上都能发信。[2] 邮件正文与附件按 MIME 规范生成,正文可同时给出 HTML 版本和纯文本版本,编码支持 UTF-8 以及 8bit、base64、quoted-printable 等方案。 该类库还会自动校验收件地址格式,并对邮件头注入进行防护。[3]
发展历程
PHPMailer 最初由 Brent R. Matzelle 于 2001 年编写,并以 SourceForge 项目的形式发布。[1] 最早的版本号为 0.90,采用 phpmailer.inc.php 这样的文件命名,其中的 SMTP 部分由 Chris Ryan 编写。[4] 到 1.73 版为止,项目由 Matzelle 主导;2007 年 Andy Prevost 接手维护,并在同年推出 2.0.0rc1。[4]
2009 年发布的 5.0.0 版启用了新的版本编号体系,代码改为完全面向对象并引入异常处理,以区别于面向 PHP 4 的旧版本。[5] 2010 年该项目成为 Google Code 上由 Jim Jagielski 管理的 Apache 孵化器项目,2012 年 Marcus Bointon 加入管理团队,随后项目仓库迁至 GitHub,并转入 PHPMailer 组织。[1] 2016 年末,该类库被披露存在一处严重安全缺陷,相关补丁发布了两轮。[1]
6.x 系列将源码移入 src 目录,并启用 PHPMailer\PHPMailer 命名空间,以降低类名冲突风险;5.2 系列则不再获得支持,连安全更新也已停止。[2] 软件以 GNU 宽通用公共许可证 2.1 版分发,并随附 GPL 合作承诺。[2]
应用
PHPMailer 的典型用途是在 Web 应用中发送注册确认、密码重置、订单通知一类的自动邮件。[2] 它被多个开源项目采用,例如 WordPress、Drupal、SugarCRM、Yii 和 Joomla。[6]
在部署方式上,官方推荐的安装途径是通过 Composer 从 Packagist 拉取 phpmailer/phpmailer 包;如果不使用 Composer,也可以下载源码后手动引入 PHPMailer.php、SMTP.php、Exception.php 等文件。[2] 若要通过 Gmail 等服务使用 XOAUTH2 认证,还需要额外引入 league/oauth2-client 依赖。[2] 该库支持 LOGIN、PLAIN、CRAM-MD5 和 XOAUTH2 等 SMTP 认证机制,并提供 DKIM 与 S/MIME 签名能力。[6] 在部分 Linux 发行版中,它以 libphp-phpmailer 之类的系统软件包形式提供。
局限
PHPMailer 只负责邮件的构造与投递,不负责把邮件送入收件人的收件箱,实际送达仍取决于所用 SMTP 服务器的信誉与配置。[2] 邮件格式与编码相关的标准繁多且互相重叠,使用该类库可以降低出错概率,但并不等于自动符合所有规范。[2]
5.2 系列已停止维护,仅停留在该版本的项目无法获得安全修复,使用较新 PHP 版本时需升级到后续发行版。[2] 从 5.2 升级到 6.x 涉及源码目录结构与命名空间的变化,需要按升级指南调整调用代码。[2] 此外,XOAUTH2 认证会引入额外的 Composer 依赖,缺少 Composer 或包管理受限的环境需要改用其他加载方式。[2]
参见
参考资料
- PHPMailer [引用日期2026-10-14]
- phpmailer/phpmailer [引用日期2026-10-14]
- phpmailer/phpmailer [引用日期2026-10-14]
- History [引用日期2026-10-14]
- moodle [引用日期2026-10-14]
- php-phpmailer6-6.9.1-3.fc41.noarch.rpm [引用日期2026-10-14]