有两个解决方案:一个是使用 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 步 中的代码
完成
网友评论