简单使用
配置
以阿里企业邮为例,修改.env
文件
MAIL_MAILER=smtp
MAIL_HOST=smtp.mxhichina.com
MAIL_PORT=25
MAIL_USERNAME=notifications-noreply@a.com
MAIL_PASSWORD=123
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=notifications-noreply@a.com
MAIL_FROM_NAME=notifications-noreply
代码语言:javascript复制关于
MAIL_ENCRYPTION
参数,我查看了源码,它的值只有tls
和其他,tls即ssl加密,源码如下:
public function setEncryption($encryption)
{
$encryption = strtolower($encryption ?? '');
if ('tls' == $encryption) {
$this->params['protocol'] = 'tcp';
$this->params['tls'] = true;
} else {
$this->params['protocol'] = $encryption;
$this->params['tls'] = false;
}
return $this;
}
发送邮件
发送文本邮件
代码语言:javascript复制 Mail::raw('邮件内容。。', function (IlluminateMailMessage $message){
// $message->to('1@qq.com');//无主题
$message->subject('测试一下。。')->to('1@qq.com');
});
发送富文本邮件
代码语言:javascript复制 Mail::send('emails.test',['name'=>'张三'],function (IlluminateMailMessage $message){
$message->subject('测试一下。。')->to('1@qq.com');
})
视图文件 resources/views/emails/test.blade.php
生成Mailables
Laravel 更推荐使用mailable
类来发送邮件
创建RegisterSuccess
root@php-fpm:/var/www/laravel-demo# php artisan make:mail RegisterSuccess
如上,生成了一个mailable 类app/Mail/RegisterSuccess.php
,请注意所有可邮寄类的配置都是在 build
方法中完成的。
配置视图
代码语言:javascript复制 public function build()
{
return $this->view('emails.register_success');
}
视图文件resources/views/emails/register_success.blade.php
纯文本邮件
你可以使用 text 方法来定义一个纯文本格式的邮件。和 view 方法一样, 该 text 方法接受一个模板名,模板名指定了在渲染邮件内容时你想使用的模板。你既可以定义纯文本格式亦可定义 HTML 格式:
代码语言:javascript复制/**
* 构建消息.
*
* @return $this
*/
public function build()
{
return $this->view('emails.register_success')
->text('emails.register_success_plain');
}
视图数据
有两种方法传递数据到视图中。
第一种,通过 Public 属性
你在 mailable 类中定义的所有 public 的属性都将自动传递到视图中。
代码语言:javascript复制 public User $user;
public function __construct(User $user)
{
//
$this->user=$user;
}
public function build()
{
return $this->view('emails.register_success')->with(['name' => 'abc']);
}
//视图文件
<body>
test2..<?=$name?>
--
<?=$user->name?>
</body>
</html>
第二种,通过 with 方法
代码语言:javascript复制 public function build()
{
return $this->view('emails.register_success')->with(['name' => 'abc']);
}
Markdown 格式邮件
Markdown 格式邮件允许你可以使用 mailable 中的预构建模板和 邮件通知 组件。由于消息是用 Markdown 编写,Laravel 能够渲染出美观的、响应式的 HTML 模板消息,同时还能自动生成纯文本副本。
生成 Markdown 邮件
代码语言:javascript复制root@php-fpm:/var/www/laravel-demo# php artisan make:mail RegisterSuccess2 --markdown=emails.register_success2
//
public function build()
{
return $this->markdown('mail.register-success2', [
'url' => $this->orderUrl,
]);
}
Markdown mailable 类整合了 Markdown 语法和 Blade 组件,让你能够非常方便的使用 Laravel 预置的 UI 组件来构建邮件消息
常用组件:按钮组件,面板组件,表格组件,当然你也可以自定义组件
可以将所有 Markdown 邮件组件导出到自己的应用,用作自定义组件的模板。若要导出组件,使用 laravel-mail 资产标签的 vendor:publish Artisan 命令:
代码语言:javascript复制php artisan vendor:publish --tag=laravel-mail
发送邮件
若要发送邮件,使用 Mail 门面 的方法。该 to 方法接受 邮件地址、用户实例或用户集合。如果传递一个对象或者对象集合,mailer 在设置收件人时将自动使用它们的 email 和 name 属性,因此请确保对象的这些属性可用。一旦指定了收件人,就可以将 mailable 类实例传递给 send 方法:
代码语言:javascript复制$user=User::query()->first();
//Mail::to('1@qq.com')->send(new RegisterSuccess($user));
Mail::to($user)->send(new RegisterSuccess($user));
渲染邮件
有时您可能希望捕获邮件的 HTML 内容而不发送它。为此,可以调用邮件类的 render 方法。此方法将以字符串形式返回邮件类的渲染内容:
代码语言:javascript复制use AppMailInvoicePaid;
use AppModelsInvoice;
$invoice = Invoice::find(1);
return (new InvoicePaid($invoice))->render();
在浏览器中预览邮件
代码语言:javascript复制Route::get('/mailable', function () {
$invoice = AppModelsInvoice::find(1);
return new AppMailInvoicePaid($invoice);
});