Laravel --- Laravel 5.3 發送郵件配置


版本:laravel 5.3

發送郵箱:QQ郵箱

根據官網以及別人的教程配置郵件發送,並且對配置過程中遇到的坑進行填補,做一總結,留待參考。

一.開啟stmp

進入QQ郵箱,設置-服務,開啟smtp。

開啟后會出現一個授權碼,記下來,要用

打開【如何使用Foxmail等軟件收發郵件】,可以找到到smtp服務器地址和端口號,記下來,要用

二.在Laravel中配置郵件發送

配置涉及到兩個文件:config/mail.php 和 .env,因為mail.php讀取的是.env的配置,所以我把mail.php中的環境變量默認值都去掉(除了mail_from_name),然后只在.env中配置

main.php

return [
    'driver' => env('MAIL_DRIVER'),
    'host' => env('MAIL_HOST'),
    'port' => env('MAIL_PORT'),

    'from' => [
        'address' => env('MAIL_FROM_ADDRESS'),
        'name' => env('MAIL_FROM_NAME','火星大人'), // 經測試,.env中的中文會被忽略,所以此變量不在.env中設置
    ],
    
    'encryption' => env('MAIL_ENCRYPTION'),
    'username' => env('MAIL_USERNAME'),
    'password' => env('MAIL_PASSWORD'),
    'sendmail' => '/usr/sbin/sendmail -bs',
];

 

.env

MAIL_DRIVER=smtp
MAIL_HOST=smtp.qq.com // STMP服務器地址
MAIL_PORT=465 // 端口
MAIL_USERNAME=88888888@qq.com // 登陸郵箱的賬號
MAIL_PASSWORD=xxxxxxxx // 授權碼
MAIL_FROM_ADDRESS=88888888@qq.com // 發件人郵箱
MAIL_ENCRYPTION=ssl

 

 三.代碼文件

創建路由:

Route::get('mail/send','MailController@send');

 

創建控制器:php artisan make:controller MailController

MailController.php

<?php

namespace App\Http\Controllers;
use Illuminate\Support\Facades\Mail;

class MailController extends Controller
{
    public function send()
    {
        $name = '王寶花';
        // emails.test 指向\resources\views\emails\test.blade.php
        Mail::send('emails.test',['name'=>$name],function($message){
            $to = '11111111@qq.com';
            $message->to($to)->subject('郵件測試');
        });
    }
}

創建視圖:\views\emails\test.blade.php

{{$name}}你好,這是一封測試文件。

 

發送:http://localhost/mail/send

四.驗證結果

"火星大人"就是 MAIL_FROM_NAME 的值

五.配置過程中遇到的兩個錯誤

1.報錯:Missing argument 1 for Illuminate\Support\Manager::createDriver(), called in G:\WWW\blog\vendor\laravel\framework\src\Illuminate\Support\Manager.php on line 87 and defined

原因:經測試發現是.env文件中的郵件配置項存在xxx=null的問題,把null改成具體值,或者去掉xxx,把xxx放到mail.php中賦值,可解決

2.報錯:Failed to authenticate on SMTP server with username "11111111@qq.com" using 1 possible authenticators

原因:郵箱賬號授權碼之類的信息不正確,修改之。我原先以為mail_password是登陸密碼,其實是授權碼

3.控制器中,mail::send()沒有返回值。網上的一些信息是通過返回值來判斷是否發送成功,這個不對。那么如何判斷是否發送成功呢?未解,可能沒報錯就是成功吧。

4.配置項或者環境變量修改后不生效問題:

  先:php artisan config:clear

  再:php artisan config:cache

  ok。

  所以每次修改main.php 或者 .env 的值后,都要這般操作一下

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM