phpmailer/phpmailer

PHPMailer 是一个功能齐全的 PHP 邮件创建和传输类

资助包维护!
Synchro

安装次数: 683,208,884

依赖项: 1,476

建议者: 40

安全: 14

星标: 20,926

关注者: 888

分支: 9,713

开放问题: 44

v6.9.1 2023-11-25 22:23 UTC

README

SWUbanner

PHPMailer

PHPMailer – 一个功能齐全的 PHP 邮件创建和传输类

Test status codecov.io Latest Stable Version Total Downloads License API Docs OpenSSF Scorecard

特性

  • 可能是世界上发送邮件最流行的 PHP 代码!
  • 被许多开源项目使用:WordPress、Drupal、1CRM、SugarCRM、Yii、Joomla! 等
  • 集成了 SMTP 支持 - 无需本地邮件服务器发送邮件
  • 可以发送包含多个收件人、抄送、密送和回复地址的邮件
  • 支持多部分/替代邮件,适用于不支持 HTML 邮件的邮件客户端
  • 添加附件,包括内嵌附件
  • 支持 UTF-8 内容和 8bit、base64、binary 及 quoted-printable 编码
  • 通过 SMTPS 和 SMTP+STARTTLS 传输支持 SMTP 认证,包括 LOGIN、PLAIN、CRAM-MD5 和 XOAUTH2 机制
  • 自动验证电子邮件地址
  • 防止标题注入攻击
  • 支持50多种语言的错误消息!
  • 支持 DKIM 和 S/MIME 签名
  • 兼容 PHP 5.5 及更高版本,包括 PHP 8.2
  • 使用命名空间以防止名称冲突
  • 更多功能!

你可能为什么需要它

许多 PHP 开发者需要在代码中发送邮件。唯一支持直接发送邮件的 PHP 函数是 mail()。然而,它并不提供任何帮助来利用诸如加密、认证、HTML 消息和附件等流行的功能。

正确格式化邮件是非常困难的。有无数重叠(和冲突)的标准,需要严格遵循复杂的格式和编码规则 - 你在网上找到的大多数直接使用 mail() 函数的代码都是错误的,如果不是不安全的!

PHP 的 mail() 函数通常通过本地邮件服务器发送,通常在 Linux、BSD 和 macOS 平台上由一个 sendmail 二进制文件提供前端,然而,Windows 通常不包含本地邮件服务器;PHPMailer 的集成 SMTP 客户端允许在所有平台上发送邮件,无需本地邮件服务器。但请注意,当可能时,应避免使用 mail() 函数;使用 SMTP 到本地主机既快又 安全

不要试图自己实现 - 如果你不使用 PHPMailer,在实现自己的代码之前,应该查看许多其他优秀的库。尝试 SwiftMailerLaminas/MailZetaComponents 等。

许可证

本软件根据 LGPL 2.1 许可证以及 GPL 合作承诺 进行分发。请阅读 LICENSE 了解软件的可用性和分发信息。

安装与加载

PHPMailer可在Packagist上获取(使用语义化版本),建议通过Composer进行安装。只需在您的composer.json文件中添加以下行:

"phpmailer/phpmailer": "^6.9.1"

或者运行:

composer require phpmailer/phpmailer

请注意,vendor文件夹和vendor/autoload.php脚本是由Composer生成的;它们不是PHPMailer的一部分。

如果您想使用XOAUTH2身份验证,还需要在您的composer.json中添加对league/oauth2-client和适当的服务适配器包的依赖,或者查看@decomplexity的SendOauth2包装器,尤其是如果您正在使用微软服务。

或者,如果您不使用Composer,可以下载PHPMailer的zip文件(注意,zip文件中不包含文档和示例),然后将PHPMailer文件夹的内容复制到PHP配置中指定的include_path目录之一中,并手动加载每个类文件。

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

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

如果您没有显式使用SMTP类(您可能没有),则不需要为SMTP类添加use行。即使您没有使用异常,您仍然需要加载Exception类,因为它在内部使用。

旧版本

PHPMailer 5.2(与PHP 5.0 — 7.0兼容)不再支持,包括安全更新。您可以在5.2-stable分支中找到5.2的最新版本。如果您使用的是PHP 5.5或更高版本(您应该使用),请切换到6.x版本。

从5.2升级

最大的变化是源文件现在位于src/文件夹中,PHPMailer现在声明了命名空间PHPMailer\PHPMailer。这有几个重要的影响 - 阅读升级指南获取更多详细信息。

最小安装

虽然手动或使用Composer安装整个包很简单、方便且可靠,但您可能只想将项目中的关键文件包含在内。至少您需要src/PHPMailer.php。如果您使用SMTP,您还需要src/SMTP.php,如果您使用POP-before SMTP(非常不可能!),您还需要src/POP3.php。如果您不对用户显示错误(并且可以仅使用英语错误),则可以跳过language文件夹。如果您使用XOAUTH2,您还需要src/OAuth.php以及您希望验证的服务所需的所有Composer依赖项。实际上,使用Composer要容易得多!

简单示例

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

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

//Create an instance; passing `true` enables exceptions
$mail = new PHPMailer(true);

try {
    //Server settings
    $mail->SMTPDebug = SMTP::DEBUG_SERVER;                      //Enable verbose debug output
    $mail->isSMTP();                                            //Send using SMTP
    $mail->Host       = 'smtp.example.com';                     //Set the SMTP server to send through
    $mail->SMTPAuth   = true;                                   //Enable SMTP authentication
    $mail->Username   = 'user@example.com';                     //SMTP username
    $mail->Password   = 'secret';                               //SMTP password
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;            //Enable implicit TLS encryption
    $mail->Port       = 465;                                    //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`

    //Recipients
    $mail->setFrom('from@example.com', 'Mailer');
    $mail->addAddress('joe@example.net', 'Joe User');     //Add a recipient
    $mail->addAddress('ellen@example.com');               //Name is optional
    $mail->addReplyTo('info@example.com', 'Information');
    $mail->addCC('cc@example.com');
    $mail->addBCC('bcc@example.com');

    //Attachments
    $mail->addAttachment('/var/tmp/file.tar.gz');         //Add attachments
    $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    //Optional name

    //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}";
}

您可以在examples文件夹中找到很多可以玩的东西,该文件夹涵盖了许多常见场景,包括通过Gmail发送、构建联系表单、发送到邮件列表等。

如果您正在重复使用实例(例如,当向邮件列表发送时),您可能需要清除收件人列表以避免发送重复消息。请参阅邮件列表示例以获取更多指导。

以上就是所有内容。现在您应该准备好使用PHPMailer了!

本地化

PHPMailer默认使用英语,但在语言文件夹中,您可以找到许多您可能遇到的PHPMailer错误信息的翻译。它们的文件名包含ISO 639-1语言代码,例如法语为fr。要指定语言,您需要告诉PHPMailer使用哪种语言,如下所示

//To load the French version
$mail->setLanguage('fr', '/optional/path/to/language/directory/');

我们欢迎更正和新语言的支持 - 如果您正在寻找更正,请在测试文件夹中运行Language/TranslationCompletenessTest.php脚本来显示任何缺失的翻译。

文档

GitHub wiki开始阅读。如果您遇到问题,请参阅故障排除指南,因为它经常更新。

如何使用PHPMailer处理常见场景的示例可以在examples文件夹中找到。如果您在寻找一个好的起点,我们建议您从Gmail示例开始。

为了减少PHPMailer部署的代码大小,如果您通过Composer或GitHub的zip文件下载加载PHPMailer,则不包括示例,因此您需要克隆git仓库或使用上述链接直接访问示例。

完整的生成API文档在线可用

您可以通过在顶级文件夹中运行phpdoc来生成完整的API级别文档,文档将出现在docs文件夹中,尽管您需要安装PHPDocumentor。您可能会发现单元测试是了解如何执行各种操作(如加密)的好参考。

如果文档没有涵盖您所需的内容,请在Stack Overflow上的许多问题中进行搜索,在您提出有关“SMTP错误:无法连接到SMTP主机”的问题之前,请阅读故障排除指南

测试

PHPMailer测试使用PHPUnit 9,使用polyfill允许9-style测试在较旧的PHPUnit和PHP版本上运行。

Test status

如果这个测试没有通过,您能做些什么来帮忙吗?

安全

请负责任地披露发现的任何漏洞 - 向维护者私下报告安全问题。

请参阅SECURITYGitHub上的PHPMailer安全警告

贡献

请将错误报告、建议和拉取请求提交到GitHub问题跟踪器

我们特别关注修复边缘情况、扩展测试范围和更新翻译。

如果您在文档中发现了错误,或者想要添加某些内容,请继续修改wiki - 任何人都可以编辑它。

如果您从迁移到PHPMailer GitHub组织之前克隆了git,您需要使用如下命令从您的克隆更新任何引用旧GitHub位置的远程URL

git remote set-url upstream https://github.com/PHPMailer/PHPMailer.git

不要再使用SourceForge或Google Code项目;它们已过时,不再维护。

赞助

PHPMailer的开发时间和资源由世界上唯一的以隐私为先的邮件营销系统Smartmessages.net提供。

Smartmessages.net privacy-first email marketing logo

欢迎捐款,无论是啤酒🍺、T恤👕还是冷硬的现金💰。通过GitHub进行赞助是对PHPMailer维护者和贡献者的简单便捷的“感谢”方式——只需点击项目页面上的“赞助”按钮如果你的公司使用PHPMailer,考虑参加Tidelift的企业支持计划。

PHPMailer For Enterprise

作为Tidelift订阅的一部分提供。

PHPMailer和其他数千个软件包的维护者正在与Tidelift合作,为构建应用程序使用的开源软件包提供商业支持和维护。节省时间,降低风险,提高代码质量,同时支付你使用的软件包的维护者。了解更多。

变更日志

查看变更日志

历史

  • PHPMailer最初由Brent R. Matzelle于2001年编写,作为一个SourceForge项目
  • Marcus Bointon(SF上的coolbru)和Andy Prevost(codeworxtech)于2004年接管了该项目。
  • 2010年成为Google Code上的Apache孵化器项目,由Jim Jagielski管理。
  • Marcus于2008年在GitHub上创建了他的分支
  • Jim和Marcus决定联手,于2013年使用GitHub作为PHPMailer的官方和规范仓库。
  • PHPMailer于2013年迁移到GitHub上的PHPMailer组织

从SourceForge迁移后发生了什么变化?

  • SourceForge和Google Code项目的官方继任者。
  • 测试套件。
  • 与GitHub Actions的持续集成。
  • Composer支持。
  • 公开开发。
  • 额外的语言和语言字符串。
  • CRAM-MD5身份验证支持。
  • 保留了从原始SourceForge项目作者、提交和分支的完整仓库历史。