yii2发送邮件教程 - 白狼栈

WBOY
リリース: 2016-05-20 11:39:19
オリジナル
1446 人が閲覧しました

作者:白狼 出处:http://www.manks.top/article/yii2_swiftMailer本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

yii2中官方为了解决邮件发送问题,提供了swiftMailer扩展。

我们先来了解下什么是swiftMailer。

Swift是一个完全采用面向对象编码用于发送e-mail的PHP函数库。Swift不依赖于PHP的mail()函数,因为用它发送多封邮件时会占用较高的服务器资源。Swift通过直接连到SMTP服务器或MTA能够更快,更高效地发送邮件。

官方文档上做出了简单的使用说明。我们也来参考下。

1、利用composer进行安装

php composer.phar <span style="color: #0000ff;">require</span> --prefer-dist yiisoft/yii2-swiftmailer
ログイン後にコピー

 

2、配置

<span style="color: #0000ff;">return</span><span style="color: #000000;"> [ 
    </span><span style="color: #008000;">//</span><span style="color: #008000;">.... </span>
    'components' =><span style="color: #000000;"> [ 
        </span>'mailer' =><span style="color: #000000;"> [ 
            </span>'class' => 'yii\swiftmailer\Mailer', 
            'viewPath' => '@common/mail', 
            <span style="color: #008000;">//</span><span style="color: #008000;"> send all mails to a file by default. You have to set 
            // 'useFileTransport' to false and configure a transport 
            // for the mailer to send real emails. </span>
            'useFileTransport' => <span style="color: #0000ff;">false</span>, 
            'transport' =><span style="color: #000000;"> [ 
                </span>'class' => 'Swift_SmtpTransport', 
                'host' => 'smtp.163.com', 
                'username' => '***@163.com', 
                'password' => '******', 
                'port' => '25', 
                'encryption' => 'tls',<span style="color: #000000;"> 
            ]</span>, 
            'messageConfig'=><span style="color: #000000;">[ 
                </span>'charset'=>'UTF-8', 
                'from'=>['***@163.com'=>'白狼栈'<span style="color: #000000;">] 
            ]</span>,<span style="color: #000000;"> 
        ]</span>,<span style="color: #000000;"> 
    ]</span>,<span style="color: #000000;"> 
];</span>
ログイン後にコピー

 

3、简单使用

<span style="color: #800080;">$mail</span>= Yii::<span style="color: #800080;">$app</span>->mailer-><span style="color: #000000;">compose(); 
</span><span style="color: #800080;">$mail</span>->setTo('***@qq.com'); <span style="color: #008000;">//</span><span style="color: #008000;">要发送给那个人的邮箱 </span>
<span style="color: #800080;">$mail</span>->setSubject("邮件主题"); <span style="color: #008000;">//</span><span style="color: #008000;">邮件主题 </span>
<span style="color: #800080;">$mail</span>->setTextBody('测试text'); <span style="color: #008000;">//</span><span style="color: #008000;">发布纯文字文本 </span>
<span style="color: #800080;">$mail</span>->setHtmlBody("测试html text"); <span style="color: #008000;">//</span><span style="color: #008000;">发送的消息内容 </span>
<span style="color: #008080;">var_dump</span>(<span style="color: #800080;">$mail</span>->send()); 
ログイン後にコピー

 

测试发现$mail->setHtmlBody()发送邮件可以发送成功。但是$mail->setTextBody()不知道为啥试了10来次都没收到,回头我再试试。

4、我们看看怎么批量发送邮件

<span style="color: #800080;">$users</span> = ['***@qq.com', '******@qq.com'<span style="color: #000000;">]; 
</span><span style="color: #800080;">$messages</span> =<span style="color: #000000;"> []; 
</span><span style="color: #0000ff;">foreach</span> (<span style="color: #800080;">$users</span> <span style="color: #0000ff;">as</span> <span style="color: #800080;">$user</span><span style="color: #000000;">) {
    </span><span style="color: #800080;">$messages</span>[] = Yii::<span style="color: #800080;">$app</span>->mailer-><span style="color: #000000;">compose() 
            </span>->setTo(<span style="color: #800080;">$user</span><span style="color: #000000;">) 
            </span>->setSubject('测试主题'<span style="color: #000000;">) 
            </span>->setHtmlBody('测试内容'<span style="color: #000000;">); 
} 
Yii</span>::<span style="color: #800080;">$app</span>->mailer->sendMultiple(<span style="color: #800080;">$messages</span>);
ログイン後にコピー

 

5、定义邮件模版,这样我们就可以更方便的构建我们的邮件模板了

在步骤2中我们定义了viewPath指向common\mail。因此我们可以在该目录下创建新的模版文件test.php,内容自己随便定义就好。

然后看看程序中怎么实现发送邮件

<span style="color: #800080;">$res</span> = Yii::<span style="color: #800080;">$app</span>->mailer->compose('test'<span style="color: #000000;">) 
    </span>->setTo('*******@qq.com'<span style="color: #000000;">) 
    </span>->setSubject('Message subject'<span style="color: #000000;">) 
    </span>-><span style="color: #000000;">send(); 
</span><span style="color: #008080;">var_dump</span>(<span style="color: #800080;">$res</span>); <span style="color: #008000;">//</span><span style="color: #008000;">true</span>
ログイン後にコピー

 

我们只需要在compose的第一个参数上填写该模版的文件名即可。

注:我这里是偶尔发到qq的垃圾箱去了,大家测试的时候也记得去查看。

实际上比如找回密码等内容时,内容基本上都是动态不定的,也就是说我们怎么实现传参呢?

这个也是很简单,只需要指定compose的第二个参数即可

<span style="color: #008000;">//</span><span style="color: #008000;">controller代码 </span>
Yii::<span style="color: #800080;">$app</span>->mailer->compose('test', ['title' => '测试'<span style="color: #000000;">]) 
    </span>->setTo('422744746@qq.com'<span style="color: #000000;">) 
    </span>->setSubject('Message subject'<span style="color: #000000;">) 
    </span>-><span style="color: #000000;">send(); 
</span><span style="color: #008000;">//</span><span style="color: #008000;">test.php </span>
<h2>= <span style="color: #800080;">$title</span> ?></h2> 
ログイン後にコピー

 

6、你也可以为你的邮件定制layout,布局文件这里放到common\mail\layouts目录下面即可。

现在我们有一个布局文件html.php,我们看看怎么利用布局文件发邮件。

Yii::<span style="color: #800080;">$app</span>->mailer->compose('test',<span style="color: #000000;"> [ 
    </span>'html' => 'html', <span style="color: #008000;">//</span><span style="color: #008000;">key固定,value是模版文件名 </span>
    'title' => 333<span style="color: #000000;"> 
]) </span>->setTo('422744746@qq.com'<span style="color: #000000;">) 
   </span>->setSubject('Message subject'<span style="color: #000000;">) 
   </span>->send();
ログイン後にコピー

 

7、我们看看如何发送带附件的邮件

我们举一个发送邮件并以附件的形式带上一张图片和一个txt文本内容试试看

继续阅读

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート