gulltour / phpmailer
Yii框架的Phpmailer扩展
Requires
- php: >=5.4.0
- phpmailer/phpmailer: *
- soundasleep/html2text: *
- yiisoft/yii2: *
This package is not auto-updated.
Last update: 2024-09-29 02:49:46 UTC
README
Yii框架的Phpmailer扩展 yii2-phpmailer
Yii 2框架的PHPMailer集成
警告!!!
Yii2框架引入了破坏向后兼容性的更改(请参阅 yiisoft/yii2#4071)。
如果您是在2014年6月26日之后更新的,应该修复您的应用程序配置和调用邮件函数(将 mail
替换为 mailer
)。
在配置文件中,您应该将
'components' => [
'mail' => [
...
替换为
'components' => [
'mailer' => [
...
在您的代码中替换
Yii::$app->mail->...
为 Yii::$app->mailer->...
(或者分别将 Yii::$app->getMail()...
替换为 Yii::$app->getMailer()...
)。
===
此扩展将流行的 PHPMailer 库集成到 Yii 2框架 中,这是一个 "功能齐全的PHP电子邮件创建和传输类"。
虽然扩展类实现了 yii\mail\MailerInterface
和 yii\mail\MessageInterface
,但一些 Yii 2 BaseMailer
和 BaseMessage
的方法被覆盖 - 主要是因为PHPMailer特定的原因。
尽管如此 - 扩展的行为应该保持预期和可预测,并符合上述接口(我相信是这样的)。如果不是 - 欢迎您报告 问题。
要求
您通常应遵循 Yii 2要求。最低要求是您的Web服务器支持PHP 5.4.0。
安装
通过Composer安装
如果您没有 Composer,您可以按照 getcomposer.org 上的说明进行安装。
在扩展安装过程中,也会安装 PHPMailer 库。
这里有两种选择 - 安装最新 稳定版 的 PHPMailer(目前是 5.2.8 - 此版本解决了许多重大问题并进行了改进)或安装最新开发版本的 dev-master。
因此,您可以运行以下命令之一:
- 对于PHPMailer稳定版
php composer.phar require --prefer-dist gulltour/phpmailer "~1.0.0"
- 对于开发版
php composer.phar require --prefer-dist gulltour/phpmailer "~1.0.0"
或者在您的 composer.json 的 require 部分中添加相应的依赖项:
"gulltour/phpmailer": "~1.0.0"
"gulltour/phpmailer": "~1.0.0"
注意:这可能会受到项目根目录中 composer.json 文件中 'minimum-stability' 设置的影响。如果您在尝试安装PHPMailer的 'dev-master' 分支时遇到错误,您应该明确指向它,在项目根目录的 composer.json 的 require 部分中添加:
"phpmailer/phpmailer": "*"
从存档文件安装
您可以手动安装扩展。为此,您需要下载存档文件并将其解压到项目 vendor/zyx
目录中。
您还需要下载 PHPMailer 库并将其解压到项目的 vendor/phpmailer
目录中。
注意:由于命名约定,第三方扩展和库都放在 vendor
目录下。
通过Composer安装的好处之一是自动加载设置的自动化。如果您从存档文件安装扩展和PHPMailer库,您将需要手动设置自动加载路径。
注意:目前PHPMailer不支持命名空间(因为其最低要求是php 5.0),但它提供了一个与SPL兼容的自动加载器,并且...
加载库的首选方式 - 只需
require '/path/to/PHPMailerAutoload.php';
,一切应该都会正常工作
有关更多信息,请参阅PHPMailer文档。
配置
要使用此扩展,您应该在您的应用程序配置文件中添加一些设置。它可能如下所示
return [
//....
'components' => [
'mailer' => [
'class' => 'gulltour\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',
],
],
],
];
这是通过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 文章。