• 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' => 'yiicachingFileCache',
            ],
            'mailer' => [
                'class' => 'yiiswiftmailerMailer',
                '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' => 'dektriumuserModule',
            ],
        ],
    ];

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

    <?php
    return [
        'components' => [
            'db' => [
                'class' => 'yiidbConnection',
                'dsn' => 'mysql:host=localhost;dbname=yii2advanced',
                'username' => 'root',
                'password' => '',
                'charset' => 'utf8',
            ],
            '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, // 注意,就是这行导致的。你要改为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邮件所遇到的坑。

  • 相关阅读:
    ObserverPattern(观察者模式)-----Java/.Net
    MementoPattern(备忘录模式)-----Java/.Net
    SpringCloud-day02-服务消费者项目建立
    SpringCloud-基础项目构建
    idea git 整合使用
    springcloud-知识点总结(三):Hystrix & Dashboard & turbine & Zuul & SpringCloud Config
    springcloud-知识点总结(二):Ribbon&Feign
    springcloud-知识点总结(一):Eureka
    layui-tree创建下拉树型选项框
    ztree带有选项框的树形菜单使用
  • 原文地址:https://www.cnblogs.com/ranwuer/p/7282705.html
Copyright © 2020-2023  润新知