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 的值后,都要这般操作一下

 

posted @ 2017-03-31 13:08  涛涛taotao  阅读(1783)  评论(1编辑  收藏  举报