zyx / zyx-phpmailer
Yii 2 框架的 PHPMailer 集成
Requires
- phpmailer/phpmailer: ~5.2.25
- soundasleep/html2text: *
- yiisoft/yii2: *
This package is not auto-updated.
Last update: 2024-09-24 00:37:08 UTC
README
Yii 2 框架的 PHPMailer 集成
===
警告!!!
PHPMailer 6 已经发布,包含一些破坏向后兼容性的更改,并且最低要求为 php 5.5。
本包目前尚不支持 PHPMailer 6(正在开发支持,但目前没有截止日期)。
此扩展将流行的 PHPMailer 库(一个 "适用于 PHP 的功能齐全的电子邮件创建和传输类")集成到 Yii 2 框架 中。
虽然扩展类实现了 yii\mail\MailerInterface
和 yii\mail\MessageInterface
,但已覆盖了 Yii 2 BaseMailer
和 BaseMessage
的某些方法——主要是由于 PHPMailer 特定的原因。
尽管如此——扩展的行为应该符合预期和可预测,并遵守上述接口(我相信是这样的)。如果不这样,请随时报告 问题。
要求
通常应遵循 Yii 2 要求。最低要求是您的 Web 服务器支持 PHP 5.4.0。
安装
通过 Composer 安装
如果您没有 Composer,您可以按照 getcomposer.org 上的说明进行安装。
在扩展安装过程中,如果您的项目中尚未包含 PHPMailer 库,它也将被安装。
因此,您可以选择以下任一操作:
php composer.phar require --prefer-dist zyx/zyx-phpmailer "^0.9.4"
或分别添加到 composer.json 的 require 部分:
"zyx/zyx-phpmailer": "^0.9.4"
注意:这可能受项目根目录 composer.json 文件中 'minimum-stability' 设置的影响。如果您想安装除项目 'minimum-stability' 以外的版本,您应明确在项目根目录 composer.json 的 require 部分中指出。
从存档文件安装
您也可以手动安装扩展。为此,您需要下载存档文件并将其提取到项目的 vendor/zyx
目录。
您还需要下载 PHPMailer 库并将其提取到项目的 vendor/phpmailer
目录。
注意:由于命名约定,第三方扩展和库保存在 vendor
目录下。
通过 Composer 安装的优点之一是自动设置自动加载。如果您从存档文件安装扩展和 PHPMailer 库,您将需要手动设置自动加载路径。
注意:目前 PHPMailer 不支持命名空间(因为其最低要求为 php 5.0),但它提供了一个与 SPL 兼容的自动加载器,并且...
加载库的首选方式是
require '/path/to/PHPMailerAutoload.php';
,然后一切应该正常工作
有关更多信息,请参阅 PHPMailer 文档。
配置
要使用此扩展,您应在应用程序配置文件中添加一些设置。它可能如下所示
return [
//....
'components' => [
'mailer' => [
'class' => 'zyx\phpmailer\Mailer',
'viewPath' => '@common/mail',
'useFileTransport' => false,
'config' => [
'mailer' => 'smtp',
'host' => 'smtp.yandex.ru',
'port' => '465',
'smtpsecure' => 'ssl',
'smtpauth' => true,
'username' => 'mysmtplogin@example.ru',
'password' => 'mYsmTpPassword',
],
],
],
];
这是通过 yandex smtp 发送电子邮件的典型配置。
如果您熟悉 PHPMailer,您会看到 'config' 数组包含设置,类似于相应的 PHPMailer 属性。当 Mailer 初始化时,它们将被填充。
例如,您可以定义
'mailer' => 'mail'
或
'mailer' => 'sendmail', 'sendmail' => '/path/to/sendmail'
- 和 PHPMailer 中的用法一样。
您也可以在 'messageConfig' 数组中配置一些应用程序的默认消息设置。它们将在创建消息时填充。
例如,您可以预先定义 'From' 电子邮件字段的默认内容,这样您就不必每次在撰写消息时都设置 'From'。
...
'mailer' => [
...
'messageConfig' => [
'from' => ['noreply@example.com' => 'My Example Site']
],
...
],
...
用法
简单用法示例
Yii::$app->mailer->compose()
->setFrom(['noreply@example.com' => 'My Example Site'])
->setTo([$form->email => $form->name])
->setSubject($form->subject)
->setTextBody($form->text)
->send();
发送带视图和布局的 HTML 电子邮件的示例(假设默认 'From' 已在应用程序配置文件中设置)
Yii::$app->mailer->compose('passwordResetToken', ['user' => $user,
'title' => Yii::t('app', 'Password reset'),
'htmlLayout' => 'layouts/html-reset'])
->setTo($this->email)
->setSubject(Yii::t('app', 'Password reset for ') . Yii::$app->params['siteName'])
->send();
注意:在撰写消息时动态设置 'htmlLayout' 不是 BaseMailer
的原生行为。此功能是在此特定扩展中引入的,并处于实验阶段。
有关更多用法示例,请参阅 Yii 2 BaseMailer
和 BaseMessage
的文档以及扩展文件中的 PHPDoc 块。
此外,还有一些 Wiki 文章可供参考。