• yii2发送邮件教程


    作者:白狼 出处: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 require --prefer-dist yiisoft/yii2-swiftmailer

    2、配置

    return [ 
        //.... 
        'components' => [ 
            'mailer' => [ 
                'class' => 'yiiswiftmailerMailer', 
                'viewPath' => '@common/mail', 
                // 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. 
                'useFileTransport' => false, 
                'transport' => [ 
                    'class' => 'Swift_SmtpTransport', 
                    'host' => 'smtp.163.com', 
                    'username' => '***@163.com', 
                    'password' => '******', 
                    'port' => '25', 
                    'encryption' => 'tls', 
                ], 
                'messageConfig'=>[ 
                    'charset'=>'UTF-8', 
                    'from'=>['***@163.com'=>'白狼栈'] 
                ], 
            ], 
        ], 
    ];

    3、简单使用

    $mail= Yii::$app->mailer->compose(); 
    $mail->setTo('***@qq.com'); //要发送给那个人的邮箱 
    $mail->setSubject("邮件主题"); //邮件主题 
    $mail->setTextBody('测试text'); //发布纯文字文本 
    $mail->setHtmlBody("测试html text"); //发送的消息内容 
    var_dump($mail->send()); 

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

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

    $users = ['***@qq.com', '******@qq.com']; 
    $messages = []; 
    foreach ($users as $user) {
        $messages[] = Yii::$app->mailer->compose() 
                ->setTo($user) 
                ->setSubject('测试主题') 
                ->setHtmlBody('测试内容'); 
    } 
    Yii::$app->mailer->sendMultiple($messages);

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

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

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

    $res = Yii::$app->mailer->compose('test') 
        ->setTo('*******@qq.com') 
        ->setSubject('Message subject') 
        ->send(); 
    var_dump($res); //true

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

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

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

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

    //controller代码 
    Yii::$app->mailer->compose('test', ['title' => '测试']) 
        ->setTo('422744746@qq.com') 
        ->setSubject('Message subject') 
        ->send(); 
    //test.php 
    <h2><?= $title ?></h2> 

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

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

    Yii::$app->mailer->compose('test', [ 
        'html' => 'html', //key固定,value是模版文件名 
        'title' => 333 
    ]) ->setTo('422744746@qq.com') 
       ->setSubject('Message subject') 
       ->send();

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

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

    继续阅读

  • 相关阅读:
    12.2 ROS NavFn全局规划源码解读_2
    12.1 ROS NavFn全局规划源码_1
    12 ROS Movebase主体源码解读
    11 ROS 动态参数调节
    10. ROS costmap代价地图
    无人驾驶汽车1: 基于Frenet优化轨迹的无人车动作规划方法
    VC下加载JPG/GIF/PNG图片的两种方法
    vc++加载透明png图片方法-GDI+和CImage两种
    供CImage类显示的半透明PNG文件处理方法
    使用MFC CImage类绘制PNG图片时遇到的问题
  • 原文地址:https://www.cnblogs.com/wwolf/p/5438691.html
Copyright © 2020-2023  润新知