在 Laravel 中,可以通过 Mail
接口的 send
方法来进行邮件发送,示例如下:
$view = 'emails.confirm';
$data = compact('user');
$from = 'xxx@163.com';
$name = 'Narcissus';
$to = $user->email;
$subject = "感谢您的注册!请确认你的邮箱。";
Mail::send($view, $data, function ($message) use ($from, $name, $to, $subject) {
$message->from($from, $name)->to($to)->subject($subject);
});
Mail
的 send
方法接收三个参数。
- 第一个参数是包含邮件消息的视图名称。
- 第二个参数是要传递给该视图的数据数组。
- 最后是一个用来接收邮件消息实例的闭包回调,我们可以在该回调中自定义邮件消息的发送者、接收者、邮件主题等信息。
发送邮件可以分为:
测试环境发送邮件
在测试环境中我们可以将 .env
文件的邮件发送驱动设置为 log 邮件驱动,这么做邮件不会被真发送出去,而是会被记录在 storage/logs/laravel.log
文件中。
MAIL_DRIVER=log
生产环境发送邮件
在生产环境中发送邮件需要配置 .env
,以 163 邮箱为例:
MAIL_DRIVER=smtp
MAIL_HOST=smtp.163.com
MAIL_PORT=25
MAIL_USERNAME=xxx@163.com
MAIL_PASSWORD=xxxx
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=xxxx@163.com
MAIL_FROM_NAME=LaravelSample
分析:
- MAIL_DRIVER=smtp —— 使用支持 ESMTP 的 SMTP 服务器发送邮件;
- MAIL_HOST=smtp.163.com —— 163 邮箱的 SMTP 服务器地址,tls 加密方式必须为此值;
- MAIL_PORT=25 —— 163 邮箱的 SMTP 服务器端口,必须为此值;
- MAIL_USERNAME=xxxxxxxxxxxxxx@163.com —— 请将此值换为你的 163 邮箱;
- MAIL_PASSWORD=xxxxxxxxx —— 密码是我们 163 邮箱的授权码,不知道如果获取的请参看获取邮箱授权码;
- MAIL_ENCRYPTION=tls —— 加密类型,选项 null 表示不使用任何加密,其他选项还有 ssl,这里我们使用 tls 即可。
- MAIL_FROM_ADDRESS=xxxxxxxxxxxxxx@163.com —— 此值必须同 MAIL_USERNAME 一致;
- MAIL_FROM_NAME=SampleApp —— 用来作为邮件的发送者名称。
此时不再需要 from
方法了:
$view = 'emails.confirm';
$data = compact('user');
$to = $user->email;
$subject = "感谢注册!请确认你的邮箱。";
Mail::send($view, $data, function ($message) use ($to, $subject) {
$message->to($to)->subject($subject);
});