phpmailer / phpmailer
PHPMailer 是一个功能齐全的 PHP 邮件创建和传输类
Requires
- php: >=5.5.0
- ext-ctype: *
- ext-filter: *
- ext-hash: *
Requires (Dev)
- dealerdirect/phpcodesniffer-composer-installer: ^1.0
- doctrine/annotations: ^1.2.6 || ^1.13.3
- php-parallel-lint/php-console-highlighter: ^1.0.0
- php-parallel-lint/php-parallel-lint: ^1.3.2
- phpcompatibility/php-compatibility: ^9.3.5
- roave/security-advisories: dev-latest
- squizlabs/php_codesniffer: ^3.7.2
- yoast/phpunit-polyfills: ^1.0.4
Suggests
- ext-mbstring: Needed to send email in multibyte encoding charset or decode encoded addresses
- ext-openssl: Needed for secure SMTP sending and DKIM signing
- decomplexity/SendOauth2: Adapter for using XOAUTH2 authentication
- greew/oauth2-azure-provider: Needed for Microsoft Azure XOAUTH2 authentication
- hayageek/oauth2-yahoo: Needed for Yahoo XOAUTH2 authentication
- league/oauth2-google: Needed for Google XOAUTH2 authentication
- psr/log: For optional PSR-3 debug logging
- symfony/polyfill-mbstring: To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)
- thenetworg/oauth2-azure: Needed for Microsoft XOAUTH2 authentication
- dev-master
- v6.9.1
- v6.9.0
- v6.8.1
- v6.8.0
- v6.7.1
- v6.7
- v6.6.5
- v6.6.4
- v6.6.3
- v6.6.2
- v6.6.1
- v6.6.0
- v6.5.4
- v6.5.3
- v6.5.2
- v6.5.1
- v6.5.0
- v6.4.1
- v6.4.0
- v6.3.0
- v6.2.0
- v6.1.8
- v6.1.7
- v6.1.6
- v6.1.5
- v6.1.4
- v6.1.3
- v6.1.2
- v6.1.1
- v6.1.0
- v6.0.7
- v6.0.6
- v6.0.5
- v6.0.4
- v6.0.3
- v6.0.2
- v6.0.1
- v6.0.0
- v6.0.0rc5
- v6.0.0rc4
- v6.0.0rc3
- v6.0.0rc2
- v6.0.0rc1
- v5.2.28
- v5.2.27
- v5.2.26
- v5.2.25
- v5.2.24
- v5.2.23
- v5.2.22
- v5.2.21
- v5.2.20
- v5.2.19
- v5.2.18
- v5.2.17
- v5.2.16
- v5.2.15
- v5.2.14
- v5.2.13
- v5.2.12
- v5.2.11
- v5.2.10
- v5.2.9
- v5.2.8
- v5.2.7
- v5.2.6
- v5.2.5
- v5.2.4
- v5.2.2
- dev-patch-2
- dev-polyfills-2.0
- dev-php-8.2
- dev-5.2-stable
This package is auto-updated.
Last update: 2024-09-18 14:28:07 UTC
README
PHPMailer – 一个功能齐全的 PHP 邮件创建和传输类
特性
- 可能是世界上发送邮件最流行的 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,在实现自己的代码之前,应该查看许多其他优秀的库。尝试 SwiftMailer、Laminas/Mail、ZetaComponents 等。
许可证
本软件根据 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版本上运行。
如果这个测试没有通过,您能做些什么来帮忙吗?
安全
请负责任地披露发现的任何漏洞 - 向维护者私下报告安全问题。
请参阅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提供。
欢迎捐款,无论是啤酒🍺、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项目作者、提交和分支的完整仓库历史。