使用yii2发送邮件

前言:
收到网站发送的邮件,在我们的生活中经常遇到,那么,我们在网站开发当中,如何向用户发送邮件呢
下面我就来介绍下如何在yii2框架中发送邮件


目录:

  1. mailer组件的配置
  2. 封装发送邮件的方法
  3. mailer里的坑

  1. 我们使用mailer插件来发送邮件

这是这个插件的github地址https://github.com/PHPMailer/PHPMailer

但是yii2中内置了mailer组件,我们只需要将它配置下就可以了

//我们在config中的main.php中进行配置,
如果觉得前后台都要用到的话,我们可以在common里来配置
//这里要注意的是组件必须在键名为components的数组中配置
 'mailer' => [
            'class' => \yii\swiftmailer\Mailer::className(),
  ]
//这样我们就配置好了一个最基本的配置

但是这样配置,并不能发送一封邮件.我们知道在yii2中组件类中的public属性我们都是可以自行配制的.我们来看看这个mailer类中,有哪里需要我们配置的数据

mailer中的注释

当我们进入mailer类中,我们可以看到开发者为我们准备了这样的注释
我们注意到,开发者让我们配置一个属性名为transport的属性.让后我们往下面找,并没有发现这个共有的属性,但是我们找到了一个魔术方法

transport魔术方法

这个魔术方法,从命名中可以看出是一个写入方法,方法有一个形参,数据类型为数组或者Swift_Transport对象

我们看了注释,也看了方法,我们现在就可以开始配置了

  • 第一个参数class 我们跟着注释写,Swift_SmtpTransport
  • 第二个参数填写邮件的服务器

我们以qq邮箱为例:
我们进入邮箱


image.png

点击设置
找到这个设置选项


image.png

看看他的说明
image.png

这里找到我们需要的配置信息
我们要发送邮件,那么发送邮件的服务器就是smtp.qq.com

  • 第三个参数 和第四个参数,在自己的邮箱里去设置,一般邮箱会发一个专门的密码来用于外部使用
  • 第四个参数就是用于传递数据的端口号,注意加密和不加密的端口是不同的
  • 第五个参数就是加密的方式

这些在邮箱的帮助文档中都有很详细的说明
下面是我的配置,不同的邮箱配置是不一样的

'mailer' => [
            'class' => \yii\swiftmailer\Mailer::className(),
            'transport' => [
                'class' => 'Swift_SmtpTransport',
                'host' => 'smtp.qq.com',
                'username' => '********@qq.com',
                'password' => '%%%%%%%%%',
                'port' => '465',
                'encryption' => 'ssl',
            ]

  1. 当我们配置完成后,我们就要开始使用了

通常我们会将发送邮件的操作封装到一个方法里,方便我们在不同的地方使用

   /**
     * 向用户发送邮件的方法
     * @param $toMember
     * 用户的邮件地址
     * @param $subject
     * 邮件主题
     * @param $body
     * 邮件内容
     * @return bool
     * 发送结果
     */
    private function sendEmail($toMember, $subject, $body)
    {
        //1构造对象
        $emailObj = Yii::$app->mailer->compose();
        //设置发件人的邮件地址
        return $emailObj->setFrom(Yii::$app->params['adminEmail'])
            ->setTo($toMember)//设置收件人的地址
            ->setSubject($subject)//设置邮件主题
            ->setHtmlBody($body)//设置邮件的内容的html
            ->send();//发送方法
    }

构造mailer对象的写法是固定写法,感情兴趣的朋友可以看看底层源码是如何写的.是在mailer的基类中继承了一个MailerInterface接口
setHtmlBody注意了,里面需要写html代码,如果不想写html的话,还有一个setTextBody方法可以不用写html代码
当我们按照上面的代码写好之后,send方法会返回一个bool值,代表是否发送成功


  1. 细心的朋友应该发现了,send之后命名返回的true,却没有收到发送的邮件.这个就是一个坑了.我们在配置中还有一个需要配置的地方.
    那就是
'useFileTransport' => false

这是一个在mailer基类中的一个属性
官方给的注释是whether to save email messages as files under [[fileTransportPath]] instead of sending them
* to the actual recipients. This is usually used during development for debugging purpose.

意思是,是否将邮件以文件的形式保存,而不是发送给实际的接收者.
是个用来调试用的开关.但是我们发现

image.png

它默认是关闭的.也就是没有开启本地调试.
这里我的解决方法就是在组件中,再次配置一次.

        'mailer' => [
            'class' => \yii\swiftmailer\Mailer::className(),
            'transport' => [
                'class' => 'Swift_SmtpTransport',
                'host' => 'smtp.qq.com',
                'username' => '*********@qq.com',
                'password' => '%%%%%%%%',
                'port' => '465',
                'encryption' => 'ssl',
            ],
            'useFileTransport' => false
        ],

也就是这样,一个完整的mailer组件的配置就是这样.这样配置好了之后就可以正常的发送邮件了.

如果有不正确的地方欢迎大家指正,共同学习.谢谢
以上.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,566评论 18 139
  • 22年12月更新:个人网站关停,如果仍旧对旧教程有兴趣参考 Github 的markdown内容[https://...
    tangyefei阅读 35,157评论 22 257
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,537评论 18 399
  • Django 官方文档 发送email 官网地址:[https://docs.djangoproject.com/...
    学以致用123阅读 2,241评论 0 2
  • 前言 上一篇已经介绍了nagios如何实现对主机及服务的监控,尽可能实现对系统运行状态的全面监控只是初级目标,n...
    天之蓝色阅读 4,909评论 0 0