Laravel5.6发送邮件问题解决方案

有两个解决方案:一个是使用 SSL 协议发送邮件,另一个是不使用 SSL,只使用普通的 25 号端口去发送邮件

第一个方案更安全,但不灵活,需要修改 swift mailer 的源代码(下面主要说这个方案)

第二个方案很简单,但不够安全

SSL 的方案
配置 .env文件

MAIL_DRIVER=smtp 
MAIL_HOST=smtp.163.com 
MAIL_PORT=465
MAIL_USERNAME=your_name@your_company.com
MAIL_PASSWORD=your_password

配置 config/mail.php (主要是将 encryption 的值从 tls 改成 ssl

'from' => ['address' => '你的发件人地址', 'name' => '你的发件人名称'],
'encryption' => 'ssl',

修改 swiftmailer/lib/classes/Swift/Transport/StreamBuffer.phpestablishSocketConnection 中有个 $options = [];,只需要在它下面加上:

$options['ssl'] = array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true);

基本完成了,现在可以发邮件了:

namespace App\Http\Controllers;

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

class MailController extends Controller
{
    public function send($user_email)
    {
        Mail::send('email/code', ['name' => 'name'], function($message) use ($user_email)
        {
            $message->to($user_email)->subject('content');
        });
    }
}

SSL 方案
上面的 第 1 步 中的 MAIL_PORT 换成 25

上面的第 2 步 中只需要注释掉 encryption 这一行

不用修改上面的 第 3 步 中的代码

完成

你可能感兴趣的:(Laravel5.6发送邮件问题解决方案)