[Laravel 5.3 新功能] 12. Mail 操作类 Laravel Mailable
来源:互联网 发布:国家电影专项资金算法 编辑:程序博客网 时间:2024/06/03 12:47
[Laravel 5.3 新功能] 12. Mail 操作类 Laravel Mailable
说明#
此文章是 [Laravel 5.3 新功能] 系列的第十二篇文章,Mail 操作类 Laravel Mailable。
[Laravel 5.3 新功能] 系列完整文章列表请见:https://laravel-china.org/topics/2638
5.3 以前的发邮件方式#
在很长的一段时间里,Laravel 发邮件的实现代码比较繁琐,比如在 5.2 里是这样发邮件的:
Mail::send('emails.reminder', ['user' => $user], function ($m) use ($user) { $m->from('hello@app.com', 'Your Application'); $m->to($user->email, $user->name)->subject('Your Reminder!');});
我并不是说这种方式不好,但是比起其他的发邮件框架,它比较容易让人迷惑。
什么是 Mailables#
在 Laravel 5.3 里,所有的发邮件逻辑都将单独使用一个 PHP 类实现,如 “NewUserWelcome” 或者 “PaymentReceipt”。它的使用机制类似于事件 (event),每个发邮件事件对应一个类,并且对外只有提供一个简单的 send 语法,你只要将对应的 email 实例传入即可实现发邮件功能。
举个例子,我们给用户发提醒邮件将这样调用:
Mail::to($user)->send(new Reminder);
在此之前,我们需通过 Artisan 命令创建 Reminder:
php artisan make:mail Reminder
命令运行成功后,程序会自动生成 app/Mail/Remider.php
文件,我们打开此文件可以看到如下内容:
<?phpnamespace App\Mail;use Illuminate\Bus\Queueable;use Illuminate\Mail\Mailable;use Illuminate\Queue\SerializesModels;class Reminder extends Mailable{ use Queueable, SerializesModels; /** * Create a new message instance. * * @return void */ public function __construct() { // } /** * Build the message. * * @return $this */ public function build() { return $this->view('view.name'); }}
注意,在这个文件,所有的邮件操作逻辑要在 build() 方法里写,我们现在就在此方法里给用户发邮件:
public function build(){ return $this->from('hello@app.com', 'Your Application') ->subject('Your Reminder!') ->view('emails.reminder');}
注意:你可以不填写邮件的标题,Laravel 会根据你的类名自动填写标题。如你的类名为
MonkeyReminder
,则默认的标题为Monkey Reminder
。
传输数据#
如果我们想传入一些数据给标题或者是邮件模板呢?我们可以这样写:
Mail::to($user)->send(new Reminder($event));
class Reminder extends Mailable{ public $event; public function __construct($event) { $this->event = $event; } public function build() { return $this->from('hello@app.com', 'Your Application') ->subject('Event Reminder: ' . $this->event->name) ->view('emails.reminder'); }}
在 mailable 类里的所有属性都能在 view 里调用:
// resources/views/emails/reminder.blade.php<h1>{{ $event->name }} is coming up soon!</h1><p>Lorem ipsum.</p>
但如果想在模板里定义指定的数据呢?你可以通过使用 with() 方法来完成:
public function build(){ return $this->from('hello@app.com', 'Your Application') ->subject('Event Reminder: ' . $this->event->name) ->view('emails.reminder') ->with(['title' => $this->event->name]);}
配置邮件发送对象#
我们可以使用下面的方法将邮件 cc 和 bcc 给其他人:
Mail::to(User::find(1)) ->cc(User::find(2)) ->bcc(User::find(3)) ->send(new Reminder);// These methods also accept collectionsMail::to(Users::all()) ->send(new Reminder);
Plaintext 视图#
现在有一个新的方法 text() 可以在 view() 方法后使用,调用此方法可以发送 Plaintext 类型的邮件。
public function build(){ return $this->view('emails.reminder') ->text('emails.reminder_plain');}
队列#
调用下面的代码可以将发邮件的逻辑放入队列:
Mail::to($user)->queue(new Reminder);
你还可以使用 later() 设置邮件延时发送
$when = Carbon\Carbon::now()->addMinutes(15);Mail::to($user)->later($when, new Reminder);
添加附件#
你可以在上述的 build() 方法里使用 attach() 添加附件:
public function build(){ $this->view('emails.reminders') ->attach('/path/to/file', [ 'as' => 'name.pdf', 'mime' => 'application/pdf', ]);}
你也可以使用 attachRaw 添加 raw data:
public function build(){ $this->view('emails.reminders') ->attachRaw($this->pdf, 'name.pdf', [ 'mime' => 'application/pdf', ]);}
全文完。
- [Laravel 5.3 新功能] 12. Mail 操作类 Laravel Mailable
- laravel mail
- Laravel E-mail 配置
- Laravel 操作
- Laravel
- laravel
- Laravel
- laravel
- Laravel
- Laravel
- Laravel
- Laravel
- laravel
- Laravel
- laravel
- Laravel
- Laravel
- Laravel
- 2440超详细uboot移植笔记(十五)------支持YAFFFS文件系统
- cnn
- Java之多态
- caffe深度学习(二)finetune
- 一些看过的博客汇总
- [Laravel 5.3 新功能] 12. Mail 操作类 Laravel Mailable
- 操作系统原理读书笔记之进程间通信IPC
- 【精】这可能是最好的认识嵌入式linux的文章
- OpenCV参考手册之CvCapture结构体
- 图像处理3_使用 metadata-extractor 解析图片 exif 元数据信息
- c++第五次实验
- LUA中的and与or
- java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
- ConcurrentHashmap源码分析(JDK1.8)