Laravel进阶系列笔记--(十八)Laravel 发送邮件
作者:温新
时间:2021-07-14
hi,我是温新,一-名PHPer。
Laravel发送邮件,之前基于QQ邮箱写过。现在应用163邮箱来演示。所使用的框架版本是Laravel8.x。
Laravel基于163邮箱发送邮件
第一步:开启SMTP服务
登录163邮箱,在【设置】中找到 POP3/SMTP
服务并将其开启并获取授权密码。
第二步:安装驱动服务
composer require guzzlehttp/guzzle
第三步:.env文件中配置邮件信息
文件:.env
MAIL_MAILER=smtp
MAIL_HOST=smtp.163.com
MAIL_PORT=25
MAIL_USERNAME=ziruchu@163.com
MAIL_PASSWORD=你的授权密码
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=ziruchu@163.com
MAIL_FROM_NAME="${APP_NAME}"
配置解释:
MAIL_MAILER -- 驱动方式
MAIL_HOST -- 邮箱所在主机
MAIL_PORT -- 邮箱发送端口号
MAIL_USERNAME -- 邮箱账号
MAIL_PASSWORD -- 授权密码
MAIL_ENCRYPTION -- 加密类型
MAIL_FROM_ADDRESS -- 邮箱地址
MAIL_FROM_NAME -- 发送人名称
MAIL_ENCRYPTION 加密类型为null,表示不使用任务加密;加密方式可以是tls/ssl
第四步:创建邮件类
php artisan make:mail TestMail
第五步:编写生成的`TestMail.php
文件:app/Mail/TestMail.php
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class TestEmail extends Mailable
{
use Queueable, SerializesModels;
public function __construct()
{
}
// 发送邮件
public function build()
{
// 发送邮件的人是ziruchu@163.com
// 内容是 test.blade.php中的内容
return $this->from('ziruchu@163.com')->view('mail.test');
}
}
第六步:定义视图文件
文件:resources/mail/test.blade.php
来自<h1>自如初</h1>的邮件
第七步:定义路由
主要是为了方便,我这里直接在路由中进行测试了。
// routes/web.php
Route::get('email', function(){
// 将邮件发送给 xyhcx@foxmail.com 这个邮箱
\Illuminate\Support\Facades\Mail::to('xyhcx@foxmail.com@qq.com')->send(new \App\Mail\TestEmail());
});
相关方法
第四步创建了一个邮件类,现在来看看这个类文件中有哪些方法可用。
from()
from
方法指明发送者的邮件。简单地说,这封邮件是从哪发送出去的。由于在.env
文件中配置了发送者邮箱,因此在build
方法中可以不写这个方法,如下:
// TestEmail.php
public function build()
return $this->view('mail.test');
}
view()
view
方法为发送邮件内容的模板视图文件。
subject()
subject
方法用于描述该邮件主题。
// TestEmail.php
public function build()
{
return $this->from('13818472103@163.com')->subject('PHP测试邮件')->view('mail.test');
}
with
with
发送数据到邮件模板中。
// 步骤一、修改TestMail.php
public function build()
{
$data = [
'webTitle' => '自如初',
'webName' => 'PHPer'
];
return $this->from('13818472103@163.com')
->subject('PHP测试邮件')
->view('mail.test')->with($data);
}
// 步骤二、修改test.blade.php邮件模板视图
来自<h1>自如初</h1>的邮件
{{ $webTitle }} -- {{ $webName }}
发送附件
attach('文件路径')
attach
发送一封附件。如excel、图片、pdf等文件。
步骤一:public
目录下新建file
目录并在该目录下创建一个文件。
步骤二:发送邮件
public function build()
{
$data = [
'webTitle' => '自如初',
'webName' => 'PHPer'
];
return $this->from('13818472103@163.com')
->subject('发送一个邮件信息')
->view('mail.test')
->with($data)
->attach('file/test.xlsx');
}
Markdown格式邮件
与发送基本邮件信息是类似的,不同的的邮件内容是用markdown
语法来连接。
第一步:创建邮件类
php artisan make:mail DemoShipped --markdown=mail.demo_shipped
使用--markdown选项会自动生成对应的视图模板文件。
对于简单的演示来说,执行完第一步就已经可以进行对应的演示了,一切都不需要改动。
第二步:修改build方法
文件:app/Mail/DemoShipped.php
public function build()
{
return $this->from('ziruchu@163.com')->markdown('mail.demo_shipped');
}
对应的视图文件方法使用的是markdown
方法。
第三步:修改视图文件
文件:resources/mail.demo_shipped.blade.php
@component('mail::message')
# 介绍
> hi,我是温新,一名PHPer。
The body of your message.
@component('mail::button', ['url' => 'https://www.ziruchu.com','color'=>'success'])
自如初
@endcomponent
Thanks,<br>
{{ config('app.name') }}
@endcomponent
第四步:发送邮件
// routes/web.php
Route::get('email', function(){
$result = \Illuminate\Support\Facades\Mail::to('457969743@qq.com')->send(new \App\Mail\DemoShipped());
dd($result);
});
Markdown视图模板组件方法
在视图模板文件中看到了默认的方法,现在来看看它们。
按钮组件
按钮组件渲染一个居中的按钮链接。接收2个参数,分别是ulr
和color
,支持的颜色有primary
、success
、error
。
@component('mail::button', ['url' => 'https://www.ziruchu.com','color'=>'success'])
自如初
@endcomponent
面板组件
面板有一个浅色背景区分其它信息,可以把它看到是一个着重信息,相当于markdown语法中 >
所显示出来的文字。
@component('mail::panel')
This is the panel content.
@endcomponent
表格组件
将markdown语法的表格转成html表格。
@component('mail::table')
| Laravel | Table | Example |
| ------------- |:-------------:| --------:|
| Col 2 is | Centered | $10 |
| Col 3 is | Right-Aligned | $20 |
@endcomponent
我是温新
每天进步一点点,就一点点