在生产环境中发送邮件

如果要在线上使用邮件发送功能,我们需要用到第三方的邮件服务来发送邮件,Laravel 文档 已给出了 Mailgun,Mandrill,SES 等邮件驱动的配置方法,除此之外比较常用的还有 Sendgrid,SendGrid 提供 400 封/月的免费邮件套餐,但 SendGrid 的账号注册审核机制稍微比较严格。这里介绍通过 Gmail 来进行邮件发送。

使用 Gmail 的邮件发送服务有两个东西需要准备:

  1. Google 账号必须开通了 两步验证;
  2. 为第三方应用提供登录使用的 App 密码(非登录密码);

上面两个步骤操作完成之后,我们还需要对 config/mail.php 进行配置,默认使用 Gmail 提供的 SMTP 地址。

config/mail.php

.
.
.
'host' => env('MAIL_HOST', 'smtp.gmail.com'),
.
.
.

接着我们要对 Heroku 应用进行配置,添加我们要用于发送邮件的 Gmail 邮箱和生成的 App 密码:

$ heroku config:set MAIL_USERNAME=xxxxxx@gmail.com
$ heroku config:set MAIL_PASSWORD=your_app_password

配置信息的讲解:

  • MAIL_USERNAME 为你的 Gmail 账号;
  • MAIL_PASSWORD 是刚刚我们在上面申请的 App 密码(非登录密码)。

配置完成之后,让我们将更改的代码进行提交,并切回到主分支上进行合并。

$ git add -A
$ git commit -m "Add password resets & email configuration"
$ git checkout master
$ git merge account-activation-password-resets

接着再将代码推送到 GitHub 和 Heroku 上。

$ git push
$ git push heroku master

由于我们在本章节中为账号激活功能新增了字段,因此需要在 Heroku 上运行迁移。

$ heroku run php artisan migrate

现在,邮件发送功能已经可以在线上正式使用了。

如果你之前有在线上环境注册过一批用户,则可以使用以下命令连接线上的 Tinker 环境:

$ heroku run php artisan tinker

并对所有已注册过的用户进行批量激活的操作:

>>> App\Models\User::where('activated', false)->update(['activated' => true, 'activation_token' => null])

你可能感兴趣的