kruisdraad / phpmailer
PHPMailer 是一个功能齐全的 PHP 邮件创建和传输类
Requires
- php: >=5.0.0
Requires (Dev)
Suggests
- league/oauth2-google: Needed for Google XOAUTH2 authentication
This package is auto-updated.
Last update: 2024-09-05 18:36:19 UTC
README
PHPMailer - PHP 的功能齐全的邮件创建和传输类
类功能
- 可能是世界上最受欢迎的从 PHP 发送邮件的代码!
- 被许多开源项目使用:WordPress、Drupal、1CRM、SugarCRM、Yii、Joomla! 等。
- 集成 SMTP 支持 - 无需本地邮件服务器发送邮件
- 支持发送带有多个 TOs、CCs、BCCs 和 REPLY-TOs 的邮件
- 支持邮件客户端不读取 HTML 邮件的 multipart/alternative 邮件
- 支持 UTF-8 内容和 8bit、base64、binary 以及 quoted-printable 编码
- 通过 SSL 和 TLS 传输支持 SMTP 身份验证(LOGIN、PLAIN、NTLM、CRAM-MD5 和 Google 的 XOAUTH2 机制)
- 47 种语言的错误消息!
- 支持 DKIM 和 S/MIME 签名
- 与 PHP 5.0 及更高版本兼容
- 更多功能!
你可能为什么需要它
许多 PHP 开发者会在他们的代码中使用电子邮件。唯一支持此功能的 PHP 函数是 mail()
函数。然而,它不提供任何辅助功能来使用流行的功能,如基于 HTML 的电子邮件和附件。
正确格式化电子邮件非常困难。存在许多重叠的 RFC,需要严格遵守极其复杂的格式化和编码规则 - 你在网上找到的大多数直接使用 mail()
函数的代码都是错误的!请不要 被诱惑自己来做这件事 - 如果你不用 PHPMailer,还有许多其他优秀的库你应该在编写自己的代码之前查看 - 尝试 SwiftMailer、Zend_Mail、eZcomponents 等。
PHP 的 mail()
函数通常通过本地邮件服务器发送,通常在 Linux、BSD 和 OS X 平台上由 sendmail
二进制文件提供前端,然而,Windows 通常不包含本地邮件服务器;PHPMailer 的集成 SMTP 实现允许在无需本地邮件服务器的情况下在 Windows 平台上发送电子邮件。
许可协议
本软件根据 LGPL 2.1 许可证进行分发。请阅读 LICENSE 以获取有关软件可用性和分发的信息。
安装与加载
PHPMailer 通过 Composer/Packagist(使用语义版本)提供,因此只需将以下行添加到您的 composer.json
文件中
"phpmailer/phpmailer": "~5.2"
或
composer require phpmailer/phpmailer
如果您想使用 Gmail XOAUTH2 身份验证类,您还需要添加对 league/oauth2-client
包的依赖。
或者,将PHPMailer文件夹的内容复制到PHP配置中指定的任何一个include_path
目录。如果您不熟悉git或者只想使用tarball,请点击GitHub页面顶部的'zip'按钮。
如果您没有使用composer的自动加载器,PHPMailer提供了一个与SPL兼容的自动加载器,这是加载库的首选方式 - 只需require '/path/to/PHPMailerAutoload.php';
,然后一切应该都能正常工作。如果自动加载器找不到类,它不会抛出错误,而是将自己添加到SPL列表中,允许您的(或您的框架的)自动加载器捕获错误。SPL自动加载是在PHP 5.1.0中引入的,因此如果您使用的是比这更早的版本,您将需要手动require或include每个类。
PHPMailer没有声明命名空间,因为命名空间是在PHP 5.3中引入的。
如果您想使用Google的XOAUTH2身份验证机制,您至少需要运行PHP 5.4,并加载composer.json
中列出的依赖项。
最小安装
虽然手动或使用composer安装整个包很简单、方便且可靠,但您可能只想将关键文件包含在您的项目中。至少,您需要class.phpmailer.php。如果您使用SMTP,您还需要class.smtp.php,如果您使用POP-before SMTP,则需要class.pop3.php。对于所有这些,我们建议您也使用自动加载器,否则您将不得不手动require所有类或使用其他自动加载器。如果您不向用户显示错误并且只能使用英语错误,则可以跳过language文件夹。如果您正在使用extras文件夹中的额外类,包括NTLM身份验证和ics生成,则可能需要这些类。如果您使用Google XOAUTH2,还需要class.phpmaileroauth.php
和class.oauth.php
类,以及composer依赖项。
一个简单的例子
<?php require 'PHPMailerAutoload.php'; $mail = new PHPMailer; //$mail->SMTPDebug = 3; // Enable verbose debug output $mail->isSMTP(); // Set mailer to use SMTP $mail->Host = 'smtp1.example.com;smtp2.example.com'; // Specify main and backup SMTP servers $mail->SMTPAuth = true; // Enable SMTP authentication $mail->Username = 'user@example.com'; // SMTP username $mail->Password = 'secret'; // SMTP password $mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted $mail->Port = 587; // TCP port to connect to $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'); $mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name $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'; if(!$mail->send()) { echo 'Message could not be sent.'; echo 'Mailer Error: ' . $mail->ErrorInfo; } else { echo 'Message has been sent'; }
您将在examples文件夹中找到更多可以玩耍的内容。
这就完成了。现在您应该可以使用PHPMailer了!
本地化
PHPMailer默认为英语,但在language文件夹中,您可以找到许多(在编写时为46个!)PHPMailer可能遇到的错误消息的翻译。它们的文件名包含ISO 639-1语言代码,例如fr
代表法语。要指定语言,您需要告诉PHPMailer使用哪种语言,如下所示
// To load the French version $mail->setLanguage('fr', '/optional/path/to/language/directory/');
我们欢迎更正和新语言 - 如果您正在寻找要做的更正,请在tests文件夹中运行phpmailerLangTest.php脚本,它将显示任何缺失的翻译。
文档
如何使用PHPMailer处理常见场景的示例可以在examples文件夹中找到。如果您正在寻找一个良好的起点,我们建议您从Gmail示例开始。
在GitHub wiki中包含了一些技巧和故障排除指南。如果您遇到问题,这是您应该首先查看的地方,因为它是更新最频繁的。
完整的生成API文档可在网上找到。
您可以在docs文件夹中找到一些基本用户级文档,并且您可以使用docs文件夹中的generatedocs.sh shell脚本来生成完整的API级文档,尽管您需要先安装PHPDocumentor。您可能会发现单元测试是了解如何执行加密等操作的很好的资源。
如果文档没有涵盖您需要的内容,请在Stack Overflow上的许多问题中搜索,并在您提出有关“SMTP错误:无法连接到SMTP主机”的问题之前,阅读故障排除指南。
测试
在test文件夹中有一个PHPUnit测试脚本。
如果这个测试没有通过,您能做些什么来帮助吗?
安全
请负责任地披露任何发现的安全漏洞 - 私下向维护者报告发现的任何安全问题。
PHPMailer版本5.2.20之前(于2016年12月28日发布)存在远程代码执行漏洞CVE-2016-10045,由Dawid Golunski负责任地报告,并由Paul Buonopane (@Zenexer)修复。
PHPMailer版本5.2.18之前(于2016年12月发布)存在远程代码执行漏洞CVE-2016-10033,由Dawid Golunski负责任地报告。
有关安全问题的更多信息,请参阅SECURITY。
贡献
请将错误报告、建议和pull请求提交到GitHub问题跟踪器。
我们特别感兴趣的是修复边缘案例、扩展测试覆盖范围和更新翻译。
随着PHPMailer GitHub组织的迁移,您需要使用以下命令从您的克隆中更新引用旧GitHub位置的任何远程URL
git remote set-url upstream https://github.com/PHPMailer/PHPMailer.git
请不要再使用SourceForge或Google Code项目。
赞助
PHPMailer的开发时间和资源由Smartmessages.net提供,这是一个强大的电子邮件营销系统。
我们欢迎接受其他贡献,无论是啤酒🍺、T恤👕、亚马逊愿望清单突袭,还是冷硬现金💰。
变更日志
请参阅changelog。
历史
- PHPMailer最初于2001年由Brent R. Matzelle编写,作为一个SourceForge项目。
- Marcus Bointon(SF上的coolbru)和Andy Prevost(codeworxtech)于2004年接管了该项目。
- 2010年成为Google Code上的Apache孵化器项目,由Jim Jagielski管理。
- Marcus在GitHub上创建了其分支。
- Jim和Marcus决定联手,并使用GitHub作为PHPMailer的官方和规范仓库。
- PHPMailer迁移到了GitHub上的PHPMailer组织。
从SourceForge迁移以来有哪些变化?
- SourceForge和Google Code项目的官方继任者。
- 测试套件。
- 与Travis-CI的持续集成。
- Composer支持。
- 公开开发。
- 额外的语言和语言字符串。
- 支持CRAM-MD5身份验证。
- 保留从原始SourceForge项目中的作者、提交和分支的完整仓库历史。