laravel框架简易对接网易163邮件
准备工作
- 申请网易邮箱并开通SMTP服务
进入设置POP3/SMTP/IMAP
,开通IMAP/SMTP
服务即可。
开通的时候,会进行一个简单的认值。认证之后,会显示一个密码,记下来,下面配置网站发送信息MAIL_PASSWORD
需要它。 - 使用
smtp
配置邮箱。
smtp
的服务器地址是smtp.163.com
, 开放端口是25
。参加网易邮箱说明。 - 生产环境配置
由于服务器提供基于安全考虑,可能已经禁用Linux的系统的25
端口。
你真正部署到线上服务器的时候,如果不能用,可能需要把端口改成465
,并开启ssl
配置。我使用的阿里云的服务器,就是个典型的案例。MAIL_PORT=465 MAIL_ENCRYPTION=ssl
- 配置模板
env文件配置如下,下面是我的账号配置,你需要按照这种模板,改成自己的就行了。MAIL_MAILER=smtp MAIL_HOST=smtp.163.com MAIL_PORT=25 MAIL_USERNAME= MAIL_PASSWORD=RBVMZTRRKVBMHDSD MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS= MAIL_FROM_NAME="${APP_NAME}"
邮箱制作
详细信息建议参加官方文档
- 生产邮寄类
生产的邮寄类,在php artisan make:mail AlertMsg
app/Mail
中,类内部的build中配置邮件模板。class AlertMsg extends Mailable { public function __construct() { // } public function build() { return $this->view('emails.alert'); }
设置发件人
如果,你的发件人都是同一个的话,可以在config/mail.php
中设置。
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
其实就是env文件中的MAIL_USERNAME
和MAIL_FROM_ADDRESS
两个配置。
MAIL_USERNAME=houxin
MAIL_FROM_ADDRESS=houxin@163.com
以上是我的配置,在这里配置你的发件人名称和发件人邮箱即可。
如果,我们需要频繁的修改发件人的话,修改发送类中的build
,添加->from
方法。
public function build()
{
return $this->from('houxin@163.com')->view('emails.alert');
}
发送邮件
在你的需要发送的控制器中使用mail类发送邮件
- 简单发送模板
这里我只是发送我的模板给目标邮箱。use Illuminate\Support\Facades\Mail;
// 测试发送邮件 public function index(){ Mail::to('1912481652@qq.com')->send(new AlertMsg); }
to
的参数可以接收一个邮箱数组,意味着群发。像这样Mail::to(['1912481652@qq.com', '21458225@qq.com'])->send(new AlertMsg);
- 特定变量参数发送
我们把变量传递给邮箱类的实例化的函数。实例化的时候,把它设置全局变量。这样,你的邮箱模板,就可以直接使用邮箱类的全局变量了。
- 修改控制器
// 测试发送邮件 public function index(){ $data = [ 'code' =>'500', 'msg' =>'Server error', ]; Mail::to(['1919401652@qq.com'])->send(new AlertMsg($data)); }
- 修改邮件发送类
public $data; public function __construct($data) { // 注册data为全局变量 $this->data = $data; } public function build() { return $this->view('emails.alert'); }
- 这样就可以在模板内部直接使用
data
变量了。
模板如下:<p>编号:{{ $data['code'] }}</p> <p>消息:{{ $data['msg'] }}</p>
邮件显示定制
- 邮件标题
邮件标题在邮箱类通过subject
指定。如下,把邮件的标题指定为"警报"public function build() { return $this->subject('警报')->view('emails.alert'); }
- 邮件发件人
.env
文件中的MAIL_FROM_NAME
是邮件发件人的名称,env中默认使用的"${APP_NAME}",也就是app名称。
如果没有任何修改的话,显示的就是laravel。
提示:这里提供了laravel邮箱的简单使用,如果需要定制的要求,建议参考官方文档。
更复杂的要求,请参见laravel文件的mail部分,点击文档地址查看