关注我的微信公众号,更多文章推送不遗漏:
1、概要
本文主要介绍三个方向的邮件应用:
-
发纯文本邮件;
-
发附件;
-
利用email视图文件模板发送带图片的html格式邮件;
2、邮件配置
要使用Yii发送邮件,就需要有一个可以发邮件的邮箱,此处我用的是新浪邮箱,大家也可以用自己公司的邮箱,不过需要确保可以使用smtp发送邮件,建议在foxmail上测一下是否可用。
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '@common/mail',
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'smtp.sina.com',
'username' => 'chenzhiweiwk@sina.com',
'password' => 'xxxxxx',
'port' => '465',
'encryption' => 'ssl',
],
'messageConfig' => [
'charset' => 'UTF-8',
'from' => ['chenzhiweiwk@sina.com' => 'PHP神灯'],
],
],
3、发送邮件
发送邮件的代码如下:
Yii::$app->mailer->compose()
->setFrom('chenzhiweiwk@sina.com') //来自哪里
->setTo('chenzhiweiwk@sina.com') //去往哪里
->setSubject('Test') //邮件主题
->setTextBody('Hello World') //邮件内容
->send();
发送效果如下:
3.1 发送附件
Yii::$app->mailer->compose()
->setFrom('chenzhiweiwk@sina.com') //来自哪里
->setTo('chenzhiweiwk@sina.com') //去往哪里
->setSubject('Test') //邮件主题
->setTextBody('Hello World') //邮件内容
->attach('/app/README.md') //附件所在路径
->send();
3.2 展示图片
如果要在邮件中展示图片的话,最好用加载视图文件的方式。YII允许我们指定自己的视图文件,一个视图文件就是email正文的html模板,我们可以给模板传递相关参数实现正文的编写,YII默认提供了一些email的视图文件,在/common/mail/
目录下。
我们在/common/mail/
目录下创建一个email模板文件:
root@85b2502a9a48:/app# cat /app/common/mail/showImage.php
<?php
use yii\helpers\Html;
/* @var $this yii\web\View */
/* @var $user common\models\User */
?>
<div class="verify-email">
<img src="<?=$imagePath?>" />
</div>
使用如下代码发送邮件:
Yii::$app->mailer->compose('showImage', [
'html' => 'showImage',
'imagePath' => 'https://img2.baidu.com/it/u=1518761123,2660003829&fm=26&fmt=auto&gp=0.jpg'
])
->setFrom('chenzhiweiwk@sina.com') //来自哪里
->setTo('chenzhiweiwk@sina.com') //去往哪里
->setSubject('Test') //邮件主题
->setTextBody('Hello World') //邮件内容
->attach('/app/README.md') //附件所在路径
->send();
compose()
的第一个参数指定邮件视图文件的文件名,第二个参数是一些配置,如下:
'html' => 'showImage'
:表示使用html模板,而不使用纯文本模板;'imagePath' => 'https://img2.baidu... ...'
:把图片路径传递到视图文件中。
邮件收到的效果如下:
4、注意要点
由于发邮件比较耗时,尤其是邮箱提供商(如:sina)业务繁忙的时候尤其严重,因此最好是放到队列中执行,否则系统会卡死。