1. 程式人生 > >Yii2 advance swiftmailer 不能發送郵件

Yii2 advance swiftmailer 不能發送郵件

激活 項目 crypt 啟動文件 for als ret 環境 郵件

我用的是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‘ => [email protected]
/* *//mail‘, ‘useFileTransport‘ => false, ‘transport‘ => [ ‘class‘ => ‘Swift_SmtpTransport‘, ‘host‘ => ‘smtp.qq.com‘, ‘username‘ => [email protected], ‘password‘ => ‘***‘, ‘port‘ => ‘465‘, ‘encryption‘ => ‘ssl‘, ], ‘messageConfig‘ => [ ‘charset‘ => ‘UTF-8‘, ‘from‘=>[[email protected]
/* */=>‘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‘ => [email protected]/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‘=>[[email protected]=>‘ABC‘] 這段配置的郵箱一樣。我用的是yii2-user插件,[email protected]ample.com,那麽我需要在frontend/config/params.php修改它為‘adminEmail‘ => [email protected], 才行。搞定這個就可以發送激活郵件了,結果就像下面這個樣子:

技術分享

以上就是這次配置swiftmailer郵件所遇到的坑。

Yii2 advance swiftmailer 不能發送郵件