Yii2 advance swiftmailer 不能发送邮件

Posted ranwuer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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插件,所以在注册的时候使用的是默认管理员邮箱admin@example.com,那么我需要在frontend/config/params.php修改它为\'adminEmail\' => \'**@foxmail.com\',  才行。搞定这个就可以发送激活邮件了,结果就像下面这个样子:

 

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

 

以上是关于Yii2 advance swiftmailer 不能发送邮件的主要内容,如果未能解决你的问题,请参考以下文章

Yii2中如何使用swiftMailer

无法从测试网站yii2 swiftmailer发送邮件

yii2.0-advanced 高级版项目搭建

yii2 advance安装

yii2.0-advanced 高级版项目搭建

如何在 YII2 Advanced 中将 Employee 表中的数据添加到用户表中