版本: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 的值后,都要這般操作一下