MateusNobreSilva/app_send_mail
GitHub: MateusNobreSilva/app_send_mail
PHP 全功能电子邮件创建与传输类,解决原生 mail() 难以安全支持加密、认证与附件的问题。
Stars: 26 | Forks: 11
```markdown
PHPMailer
PHPMailer – PHP 的全功能电子邮件创建与传输类
测试状态 codecov.io 最新稳定版本 总下载量 许可证 API 文档
功能
这可能是世界上最流行的用于从 PHP 发送电子邮件的代码!
被许多开源项目使用:WordPress、Drupal、1CRM、SugarCRM、Yii、Joomla! 等
集成 SMTP 支持——无需本地邮件服务器即可发送
支持发送到多个收件人、抄送、密送和回复地址
为不读取 HTML 邮件的邮件客户端提供多部分/替代邮件
添加附件,包括内嵌附件
支持 UTF-8 内容以及 8bit、base64、binary 和 quoted-printable 编码
通过 SMTPS 和 SMTP+STARTTLS 传输使用 LOGIN、PLAIN、CRAM-MD5 和 XOAUTH2 机制进行 SMTP 认证
自动验证电子邮件地址
防止报头注入攻击
错误信息支持 50 多种语言!
支持 DKIM 和 S/MIME 签名
兼容 PHP 5.5 及更高版本,包括 PHP 8.1
使用命名空间以防止名称冲突
更多功能!
为何你可能需要它
许多 PHP 开发者需要从他们的代码中发送电子邮件。唯一直接支持此功能的 PHP 函数是 mail()。然而,它无法提供任何帮助来使用诸如加密、认证、HTML 消息和附件等流行特性。
正确格式化电子邮件出乎意料地困难。有许多重叠(且相互冲突)的标准,需要严格遵守令人头疼的格式化和编码规则——你在网上找到的绝大多数直接使用 mail() 函数的代码都是错误的,甚至是不安全的!
PHP mail() 函数通常通过本地邮件服务器发送邮件,在 Linux、BSD 和 macOS 平台上通常由 sendmail 二进制文件前置,而 Windows 通常不包含本地邮件服务器;PHPMailer 的集成 SMTP 客户端允许在所有平台上发送电子邮件,而无需本地邮件服务器。但请注意,应尽量避免使用 mail() 函数;使用 SMTP 发往 localhost 既更快也更安全。
请不要尝试自己实现——如果你不使用 PHPMailer,还有许多其他优秀的库,你应该在使用自己编写代码之前先研究它们。尝试 SwiftMailer、Laminas/Mail、ZetaComponents 等。
许可证
本软件在 LGPL 2.1 许可证下分发,同时附带 GPL 合作承诺。请阅读 LICENSE 文件以了解软件的可用性和分发信息。
安装与加载
PHPMailer 可在 Packagist 上获取(使用语义化版本控制),并通过 Composer 安装是推荐的安装方式。只需将以下行添加到你的 composer.json 文件:
"phpmailer/phpmailer": "^6.5"
或运行
composer require phpmailer/phpmailer
请注意,vendor 文件夹和 vendor/autoload.php 脚本由 Composer 生成;它们不属于 PHPMailer。
如果你想使用 Gmail XOAUTH2 认证类,还需要在 composer.json 中添加对 league/oauth2-client 包的依赖。
或者,如果你不使用 Composer,可以下载 PHPMailer 的 zip 文件(注意:文档和示例不包含在 zip 文件中),然后将 PHPMailer 文件夹的内容复制到 PHP 配置中指定的 include_path 目录之一,并手动加载每个类文件:
SMTPDebug = SMTP::DEBUG_SERVER; // 启用详细调试输出
$mail->isSMTP(); // 使用 SMTP 发送
$mail->Host = 'smtp.example.com'; // 设置用于发送的 SMTP 服务器
$mail->SMTPAuth = true; // 启用 SMTP 认证
$mail->Username = 'user@example.com'; // SMTP 用户名
$mail->Password = 'secret'; // SMTP 密码
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; // 启用隐式 TLS 加密
$mail->Port = 465; // TCP 端口用于连接;如果设置 `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS` 则使用 587
// 收件人
$mail->setFrom('from@example.com', 'Mailer');
$mail->addAddress('joe@example.net', 'Joe User'); // 添加一个收件人
$mail->addAddress('ellen@example.com'); // 名称可选
$mail->addReplyTo('info@example.com', 'Information');
$mail->addCC('cc@example.com');
$mail->addBCC('bcc@example.com');
// 附件
$mail->addAttachment('/var/tmp/file.tar.gz'); // 添加附件
$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // 可选名称
// 内容
$mail->isHTML(true); // 将邮件格式设置为 HTML
$mail->Subject = '这是主题';
$mail->Body = '这是 HTML 消息体 加粗!';
$mail->AltBody = '这是非 HTML 邮件客户端的纯文本正文';
$mail->send();
echo '消息已发送';
} catch (Exception $e) {
echo "消息无法发送。邮件错误: {$mail->ErrorInfo}";
}
你可以在 examples 文件夹中找到许多常见场景的示例,包括通过 Gmail 发送、构建联系表单、发送到邮件列表等。
如果你重复使用实例(例如在向邮件列表发送时),可能需要清除收件人列表以避免重复发送消息。有关进一步指导,请参阅邮件列表示例。
就这样。你现在应该准备好使用 PHPMailer 了!
本地化
PHPMailer 默认为英文,但在 language 文件夹中,你可以找到许多用于 PHPMailer 错误消息的翻译。它们的文件名包含翻译的 ISO 639-1 语言代码,例如 fr 表示法语。要指定语言,你需要告诉 PHPMailer 使用哪一个,如下所示:
// 加载法语版本
$mail->setLanguage('fr', '/optional/path/to/language/directory/');
我们欢迎更正和新语言——如果你在寻找更正,请在 tests 文件夹中运行 PHPMailerLangTest.php 脚本,它将显示缺失的翻译。
文档
从 GitHub wiki 开始阅读。如果遇到问题,请查阅故障排除指南,因为它会频繁更新。
有关如何使用 PHPMailer 的常见场景可以在 examples 文件夹中找到。如果你在寻找一个好的起点,我们建议你从 Gmail 示例开始。
为了减少 PHPMailer 的部署代码体积,如果通过 Composer 或 GitHub 的 zip 文件下载加载 PHPMailer,则不包含示例,因此你需要克隆 git 仓库或使用上述链接直接获取示例。
完整的生成 API 文档在线可用。
你可以通过在顶级文件夹运行 phpdoc 来生成完整的 API 级文档,文档将出现在 docs 文件夹中,但你可能需要安装 PHPDocumentor。你可能会发现单元测试是了解如何执行各种操作(如加密)的好参考。
如果文档没有涵盖你需要的内容,请在 Stack Overflow 上搜索许多问题,在提问“SMTP Error: Could not connect to SMTP host.”之前,请阅读故障排除指南。
测试
PHPMailer 测试使用 PHPUnit 9,并带有回退以兼容旧版本的 PHPUnit 和 PHP。
测试状态
如果这没有通过,你能做些什么来帮助吗?
安全性
请负责任地披露发现的漏洞——将安全问题私下报告给维护者。
请参阅 SECURITY 和 GitHub 上的 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 隐私优先电子邮件营销标志
非常欢迎捐赠,无论是啤酒 🍺、T恤 👕 还是真金白银 💰。通过 GitHub 的赞助是向 PHPMailer 维护者和贡献者说“谢谢”的一种简单方便的方式——只需点击项目页面上的“赞助”按钮。如果你的公司使用 PHPMailer,请考虑参加 Tidelift 的企业支持计划。
PHPMailer For Enterprise
作为 Tidelift 订阅的一部分提供。
PHPMailer 维护者和数千个其他软件包的维护者正在与 Tidelift 合作,为你使用的开源软件提供商业支持和维护。节省时间、降低风险并改善代码健康状况,同时支付你实际使用的软件包的维护者费用。了解更多。
变更日志
请参阅 changelog。
历史
PHPMailer 最初由 Brent R. Matzelle 于 2001 年作为 SourceForge 项目编写。
Marcus Bointon(coolbru on SF)和 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 项目中的作者、提交和分支历史。
```
标签:1CRM, 404团队, 8bit, API文档, Base64, BCC, CC, Codecov, Composer, CRAM-MD5, DKIM, Drupal, ffuf, HTML邮件, Joomla, LGPL, LOGIN, MIME, OpenVAS, Packagist, PECL, PHP, PHP 5.5, PHP 8.1, PHPMailer, PHPUnit, PLAIN, Quoted-Printable, Reply-To, S/MIME, SMTP, SMTP认证, SSL/TLS, STARTTLS, SugarCRM, UTF-8, WordPress, XOAUTH2, Yii, 内嵌附件, 单元测试, 命名空间, 多收件人, 多语言错误, 头注入防护, 开源库, 开源框架, 持续集成, 搜索引擎爬虫, 自动验证邮箱, 邮件传输, 邮件发送, 邮件安全, 邮件库, 集成开发