我用的是Yii2高级模板,在配置好邮箱后,并编写测试,测试结果表明是发送成功的,但我的邮箱就是接受不了邮件。

经过排查发现,是由 common/config/main-local.php 文件的 'useFileTransport' => true这条配置造成的。一般来说只要安装好了Yii2高级模板之后,并初始化为dev环境后,你的common目录下会生成main-local.php文件,这个文件是你开发项目的时候的配置文件,它会覆盖main.php文件的配置。所以我将 'userFileTransport' => false 语句替换掉以前的就可以了发送邮件了。

以下是common/main.php配置:

<?php
return [
'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
'components' => [
'cache' => [
'class' => 'yii\caching\FileCache',
],
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '@common/mail',
'useFileTransport' => false,
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'smtp.qq.com',
'username' => '**@qq.com',
'password' => '***',
'port' => '465',
'encryption' => 'ssl',
],
'messageConfig' => [
'charset' => 'UTF-8',
'from'=>['**@foxmail.com'=>'ABC']
],
],
],
'modules' => [
'user' => [
'class' => 'dektrium\user\Module',
],
],
];

这个是 common/main-local.php配置:

<?php
return [
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii2advanced',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
],
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'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, // 注意,就是这行导致的。你要改为false才行。
],
],
];

解释一下Yii2 高级模板 的配置文件加载机制:

一个典型的项目有它的启动文件和配置文件,比如web/index.php 就是启动文件,common/config/main.php 就是配置文件。其中-local.php结尾的配置文件是本地开发配置文件,一般来说它需要加入到 .ignore 文件,以避免和线上环境冲突。

为了避免各个应用配置文件之间的冲突,所以Yii推出了配置文件的加载顺序。一般来说以以下方式加载:

1. common/config/main.php
2. common/config/main-local.php
3. frontend/config/main.php
4. frontend/config/main-local.php

按照顺序号从小到大依次加载,后面的配置会覆盖前面的配置,所以说才导致了上文的问题。

yii除了基本配置文件外,还有应用参数配置文件,同时它也是有加载顺序的:

1. common/config/params.php
2. common/config/params-local.php
3. frontend/config/params.php
4. frontend/config/params-local.php

加载顺序和上文一样,后面的配置依旧会覆盖前面的配置。

以上步骤有可能还不能解决发送邮件的问题。

如果注册用户的时候提示:

501 mail from address must be same as authorization user

这个意思是说邮件的发送人必须和 swiftmailer的 'from'=>['**@foxmail.com'=>'ABC'] 这段配置的邮箱一样。我用的是yii2-user插件,所以在注册的时候使用的是默认管理员邮箱admin@example.com,那么我需要在frontend/config/params.php修改它为'adminEmail' => '**@foxmail.com',  才行。搞定这个就可以发送激活邮件了,结果就像下面这个样子:

以上就是这次配置swiftmailer邮件所遇到的坑。

Yii2 advance swiftmailer 不能发送邮件的更多相关文章

  1. yii2 advance 安装

    1. 前提条件,php版本得> 5.4 D:\phpStudy>php -v PHP (cli) (built: Sep ::) Copyright (c) - The PHP Group ...

  2. yii2 advance安装

    转载自:http://www.genshuixue.com/i-cxy/p/7986531 1. 前提条件,php版本得> 5.4D:\phpStudy>php -v PHP 5.5.17 ...

  3. Yii Swiftmailer 发送中文附件

    所用的是Yii2 的basic框架.它本身集成了邮件发送插件swiftmailer,发送邮件是很方便的,但是当发送的邮件带有中文名称的附件时,就出现了问题,邮件所带的附件显示名称错误.比如原名&quo ...

  4. 安装YII

    吸收了其它php网站的搭建经验,没想到安装yii的时候还是状况频出 yii2 安装 http://www.yiichina.com/tutorial/324 1.下载了个yii2 advance的版本 ...

  5. yii2 发送邮件 yii\swiftmailer\Mailer

    Yii2 中发送邮件 yii\swiftmailer\Mailer 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'viewPath ...

  6. yii2发送邮件教程

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

  7. [moka同学笔记]YII2中发送邮件示例(转载)

    原文:http://yiilib.com/topic/675/Yii2%E4%B8%AD%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6%E7%A4%BA%E4%BE%8B { ...

  8. yii2发送邮件(配置QQ版本)

    1:首先在配置文件main-local.php components=>[]里面配置 'mailer' => [              'class' => 'yii\swift ...

  9. PHP使用SwiftMailer发送邮件

    用到了swiftmailer 的lib库 官方网址:http://swiftmailer.org/ require_once 'lib/swift_required.php';//给我发送邮件func ...

随机推荐

  1. 考拉定时任务框架kSchedule

    此文已由作者杨凯明授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1.背景 目前项目中使用的定时任务框架存在下面这些问题 没有统一的定时任务管理平台 目前项目中使用定时任务的 ...

  2. 深入解读docker网络与kubernetes网络

    前言:你是否学习使用k8s很久很久了可是对于网络这块仍旧似懂非懂呢? 您是否对网上一堆帖子有如下的抱怨: 打开多个博客,然后发现有区别么? 明显是直译过来的,越看越迷糊 “因为xxx,所以yyy”,. ...

  3. JVM内存模型详解

    内存模型 内存模型如下图所示 堆 堆是Java虚拟机所管理的内存最大一块.堆是所有线程共享的一块内存区域,在虚拟机启动时创建.此内存区域唯一的目的就是存放对象实例.所有的对象实例都在这里分配内存 Ja ...

  4. scikit-learning API

    API参考 这是scikit学习的类和函数参考.有关详细信息,请参阅完整的用户指南,因为类和功能原始规格可能不足以给出其使用的完整指导. sklearn.base:基类和效用函数 所有估计器的基类. ...

  5. Codeforces Round #410 (Div. 2) C

    Description Mike has a sequence A = [a1, a2, ..., an] of length n. He considers the sequence B = [b1 ...

  6. 如何改变CSV文件的编码

    通常我.csv文件的编码都不是我们想要的,比如我要把他保存为Utf-8格式的,好让我可以导入数据库,不乱码 工具/原料电脑,.csv文件方法/步骤1首先,将.csv文件保存一下.然后鼠标右击打开方式记 ...

  7. 520 Detect Capital 检测大写字母

    给定一个单词,你需要判断单词的大写使用是否正确.我们定义,在以下情况时,单词的大写用法是正确的:    全部字母都是大写,比如"USA".    单词中所有字母都不是大写,比如&q ...

  8. c语言读取一个文件夹下的全部文件(jpg / png 文件)

    #include <cstdio> #include <cstring> #include <unistd.h> #include<dirent.h> ...

  9. Docker容器相关技术

    docker需要依赖的Linux内核特性:(1)Namespaces 命名空间PID(Process ID) 用来隔离进程NET(Network) 管理网络接口IPC(InterProcess com ...

  10. Smart SVN的使用

    最近项目使用了SVN,为管理代码起到了很好的作用!但是,对于很多初步使用着,还是非常不容易! 公司使用的是Smart SVN 客户端. Smart SVN 这个工具总体还是挺不错的! 在代码的提交和获 ...