laravel学习笔记--邮件发送

邮件发送

Laravel 基于热门的 SwiftMailer 函数库提供了一套干净、简洁的 API ,可以为
SMTP、Mailgun、Postmark、Amazon SES 和 sendmail
提供驱动,让你可以快速从本地或云端服务自由地发送邮件。

配置文件

配置文件可以在.env文件中去修改

//使用方式
MAIL_MAILER=smtp
//服务器地址
MAIL_HOST=smtp.163.com
//发送端口
MAIL_PORT=465
//发送邮箱
MAIL_USERNAME=xiaoxindcw@163.com
//授权码
MAIL_PASSWORD=PTZULMGPZICUNQXO
//发送方式,这里使用ssl加密
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=xiaoxindcw@163.com
//发送头
MAIL_FROM_NAME="博客"

生成 Mailables(可邮寄类)

在 Laravel 中,应用发送的每种邮件都被表示为 mailable 类。这些类存储于 app/Mail
目录中。如果您的应用中没有该目录,别慌,当您使用 make:mail 命令生成您的首个 mailable 类时,应用将会自动创建它

首次生成Mail会自动在app目录中去生成一个新的Mail目录,该目录专门放与邮件有关的类

生成mailable 类命令

php artisan make:mail OrderShipped

其实,所有的 mailable 类的配置都在 build 方法中完成

配置发件人
使用 from 方法
有两种方法配置发件人
第一种,您可以在 mailable 类的 build 方法中使用 from 方法

return $this->from('example@example.com')
                ->view('emails.orders.shipped');

第二种,使用全局的 from 地址,它在.env配置文件中就已经配置好了

MAIL_FROM_ADDRESS=xiaoxindcw@163.com

配置邮件视图

可以在 mailable 类的 build 方法中使用 view 方法来指定在渲染邮件内容时要使用的模板

由于每封邮件通常使用 Blade 模板 来渲染其内容,因此您可以在构建您的邮件 HTML 内容时使用 Blade
模板引擎提供的所有功能及享受其带来的便利性

模板可以放在resources/views目录下,一般的做法就是在resources/views目录下再创建一个emails目录,也就是resources/views/emails这里面存放邮件视图

纯文本邮件
可以使用 text 方法来定义一个纯文本格式的邮件

和 view 方法一样,text 方法接受一个模板名,模板名指定了在渲染邮件内容时您想使用的模板。您既可以定义纯文本消息亦可定义 HTML
消息

/**
 * 构建邮件消息。
 *
 * @return $this
 */
public function build()
{
    return $this->view('emails.orders.shipped')
                ->text('emails.orders.shipped_plain');
}

视图数据

通常情况下,可能想要在渲染邮件的 HTML 内容时传递一些数据到视图中

有两种方法传递数据到时视图中

第一种,在 mailable 类中定义的所有 public属性都将自动传递到视图中

例如:

/**
     * 订单实例。
     *
     * @var Order
     */
    public $order;
    /**
     * 创建一个消息实例。
     *
     * @param  AppModelsOrder  $order
     * @return void
     */
    public function __construct(Order $order)
    {
        $this->order = $order;
    }

当数据被设置成为 public 属性之后,它将被自动传递到您的视图中,因此可以像在 Blade 模板中直接访问它们

div>
    Price: {{ $order->price }}
/div>

第二种方法,通过 with 方法

如果想要在邮件数据发送到模板前自定义它们的格式,您可以使用 with 方法来手动传递数据到视图中

一般情况下,您还是需要通过 mailable 类的构造函数来传递数据;不过,您应该将它们定义为 protected 或private以防止它们被自动传递到视图中。然后,在您调用 with 方法的时候,可以以数组的形式传递您想要传递给模板的数据

/**
     * 订单实例。
     *
     * @var AppModelsOrder
     */
    protected $order;

    /**
     * 创建一个消息实例。
     *
     * @param  AppModelsOrder $order
     * @return void
     */
    public function __construct(Order $order)
    {
        $this->order = $order;
    }

    /**
     * 构造消息。
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.orders.shipped')
                    ->with([
                        'orderName' => $this->order->name,
                        'orderPrice' => $this->order->price,
                    ]);
    }

当数据使用 with 方法传递后,您便可在您的视图中使用它们,此时,您便可以像在 Blade 模板中那样来访问它们

div>
    Price: {{ $orderPrice }}
/div>

发送邮件

若要发送邮件,使用 Mail facade 的 to 方法。 to 方法接受 邮件地址、用户实例或用户集合。

Mail::to('876280441@qq.com')
->send(new OrderShipped());
//send是去指定要发送哪一个邮件类

版权声明:
作者:linrux
链接:https://www.tot7.cn/technology/php/70.html
来源:Code林
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>