Yii2 advance swiftmailer 不能发送邮件

我用的是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插件,所以在注册的时候使用的是默认管理员邮箱[email protected],那么我需要在frontend/config/params.php修改它为‘adminEmail‘ => ‘**@foxmail.com‘,  才行。搞定这个就可以发送激活邮件了,结果就像下面这个样子:

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

时间: 2024-09-29 20:07:41

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

yii2 advance安装

转载自:http://www.genshuixue.com/i-cxy/p/7986531 1. 前提条件,php版本得> 5.4 D:\phpStudy>php -v PHP 5.5.17 (cli) (built: Sep 16 2014 16:17:50) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies D:\phpStudy> 2

Yii Swiftmailer 发送中文附件

所用的是Yii2 的basic框架.它本身集成了邮件发送插件swiftmailer,发送邮件是很方便的,但是当发送的邮件带有中文名称的附件时,就出现了问题,邮件所带的附件显示名称错误.比如原名"测试.doc"的附件,发出来后看到的名字只有".doc". 这是因为swiftmailer中使用的一个basename()函数不支持中文. 对于basic版本框架,路径在/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mim

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

1:首先在配置文件main-local.php components=>[]里面配置 'mailer' => [              'class' => 'yii\swiftmailer\Mailer',              'useFileTransport' =>false,//这句一定有,false发送邮件,true只是生成邮件在runtime文件夹下,不发邮件                'transport' => [                

yii2.0 发送邮件笔记

Yii2.0内部已经集成了swiftmailer发送邮件类,无需再用phpmailer之类的类了,听说swiftmailer这个也很强大.既然yii2.0内部已经有了swiftmailer扩展,则就用它内部的方法实现就好了. 在web.php里配置邮件的相关参数: 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', //引入swiftmailer扩展 'transport' => [ 'class' => 'Swift_SmtpTr

[YII2] 3步发送邮件,有图有真相!

代码如下: 第一步:配置层(上面的配置图片不显示,只能手写啦!就在配置'components' => []里边配置邮箱) 1 'mailer' => [ 2 'class' => 'yii\swiftmailer\Mailer', //服务器类 3 'useFileTransport' => false,//这句一定有,false发送邮件,true只是生成邮件在runtime文件夹下,不发邮件 4 'transport' => [ 5 'class' => 'Swift

yii2 联系我们发送邮件报错

为什么会报错,因为国内的邮件服务商要求发送邮件的人和设置的smtp服务器账号要相同,因为联系我们的是用户,也就是发件人是用户,而不是我们配置的邮箱,所有出错. 这里我用了个取巧的办法,发件人改为自己,客户的邮箱信息直接拼接在邮件内容,这样我们收到邮件就能知道谁留下的信息.这样有个好处,自己发邮件给自己,成功概率100% 把控制器改为这样写: public function actionContact() { $model = new ContactForm(); if ($model->load

我 &amp;&amp; yii2(日志埋点,邮件提醒)

今天试着把yii2 的日志,如果发送邮件的形式实现,具体实现如下 1.环境介绍 lnmp php5.6, mysql5.5, lnmp1.2 yii2-advanced 2.配置文件的编写 在frontend/config/main.php 添加mailer 和 log 的配置 'mailer' => require_once '../config/mail.php', 'log' => require_once '../config/log.php', mailer的配置如下(fronten

yii2 邮件发送(有图有真相)

经典的密码找回方案是发送邮件到用户邮箱然后修改密码,下面利用yii2 高级版的mail功能,进行邮件的发送,如下图 1.在comm/config/main-local.php中添加 'mailer' =>[ 'class' => 'yii\swiftmailer\Mailer', 'viewPath' => '@common/mail', //指定邮件模版路径 //false:非测试状态,发送真实邮件而非存储为文件 'useFileTransport' => false, 'tra

yii2.0邮件发送问题解决

用yii2.0邮件类做一个定时发送邮件的功能,在本地测试没问题,放到线上就说连接163服务器超时各种问题,最后查查改改,已经解决了,现在就把遇到的问题记录下. <php $config = [ 'id' => 'basic-console', 'basePath' => dirname(__DIR__), 'bootstrap' => ['log'], 'controllerNamespace' => 'app\commands', 'mailer' => [ 'cla