简介

在项目中,很多时候我们要用到邮件发送功能。比如我在用laravel做找回密码功能时,要向用户的邮箱发送邮件。在laravel中,Laravel 基于热门的 SwiftMailer 函数库提供了一套简洁的 API。Laravel 为 SMTP、Mailgun、Mandrill、Amazon SES、PHP 的 mail 函数及 sendmail 提供驱动,让你可以从本地或云端服务自由地发送邮件。

使用方法

安装扩展

根据不同的驱动需要安装不同的扩展

  • 基于 API 的驱动程序如 Mailgun 和 Mandrill 都必须引入 Guzzle HTTP 类库,你可以通过在 composer.json 文件中添加下面的内容来进行安装:

  • 如果使用 Mailgun 驱动,你首先需要安装 Guzzle,然后设置 config/mail.php 配置文件的 driver 选项为 mailgun。然后,你需要确认你的 config/services.php 配置文件中包含以下选项:

  • 如果使用 Mandrill 驱动,你首先需要安装 Guzzle,然后设置 config/mail.php 配置文件的 driver 选项为 mandrill。接着,你需要确认你的 config/services.php 配置文件中包含以下选项:

  • 如果使用 SparkPost 驱动,你首先需要安装 Guzzle,然后设置你的 config/mail.php 配置文件中的 driver 选项为 sparkpost。接着,你需要确认你的 config/services.php 配置文件中包含以下选项:

  • 如果使用 Amazon SES 驱动,你需要在 PHP 中引入 Amazon AWS SDK。你可以通过在 composer.json 文件中进行引入安装

    然后设置你的 config/mail.php 配置文件的 driver 选项为 ses。接着,你需要确认你的 config/services.php 配置文件中包含以下选项:

特别说明

如果你使用的是lumen的话,需要添加 illuminate/mail 模块:

Mailgun和Amazon SES都是收费的,Maildrill目前不支持中国区用户,这三个都是第三方邮件服务。mail驱动使用PHP提供的mail函数发送,sendmail驱动通过Sendmail/Postfix(Linux)提供的命令发送邮件,smtp驱动通过支持ESMTP的SMTP发送邮件。

注:ESMTP即Extended SMTP, 是对标准 SMTP 协议进行的扩展,它与 SMTP 服务的区别仅仅是,使用 SMTP 发信不需要验证用户帐户,而用 ESMTP 发信时,服务器会要求用户提供用户名和密码以便验证身份。

项目代码配置

根据实际情况,我在项目中选择了smtp驱动来发送邮件

配置config/mail.php

.env文件配置

上面config/mail.php中大写的配置项在env文件中写出,等号后面的为示例内容

控制器代码

视图代码

在resources/views/emails目录下新建test.blade.php,(此处的emails/test对应邮件视图的第一个参数)

视图中的代码与普通的模板代码没有任何区别,但不要写注释,会被当成邮件内容发送的

lumen的特别说明

lumen需要在bootstrap/app.php中注册相应的服务

有人也许会问,为啥不能直接$app->register( Illuminate\Mail\MailServiceProvider::class)? 一开始,我也是直接这样做的,然后就遇到了坑 — Lumen中不像Laravel,配置文件不会自动加载,所以这个地方建议使用loadComponent来搞。

Comments

    1. xiaoming Article Author

      嗯 是啊 不过配置也不麻烦 就安装几个包 前面说的很多类型,各种驱动,就是了解一下,反正一般用SMTP

发表评论

电子邮件地址不会被公开。 必填项已用*标注