Laravel 发送邮件(适用于生产环境)
1. 应用场景
系统邮件发送量较小,暂时不需要另外购买邮件发送服务。
系统开发阶段,进行邮件发送测试。
在用户注册的时候发送账户激活邮件,验证电子邮件。
2. 前期准备
- 开启了
POP3
和SMTP
服务的 QQ 邮箱。
具体可查看QQ邮箱官方说明:如何开启 QQ 邮箱的POP3/SMTP/IMAP功能?
3. 使用 Laravel 组件 Mail 发送邮件的具体步骤
在开始之前,请仔细阅读 Mail 的官方文档。
Step 1:配置邮件发送服务
在项目目录下的.env
文件或者 config/mail.php
文件对邮件发送服务进行配置,具体设置如下:
MAIL_DRIVER=smtp
MAIL_HOST=smtp.qq.com
MAIL_PORT=465
MAIL_USERNAME=xxxxxx@qq.com
MAIL_PASSWORD=zwntejlaeklqbhbj
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=xxxxxx@qq.com
MAIL_FROM_NAME=YourAppName
MAIL_USERNAME
和MAIL_FROM_ADDRESS
的值必须一致,都是设置为你的QQ邮箱地址。MAIL_PASSWORD
的值实在开启邮箱POP3/SMTP
功能时获取的一个密码(注意:不是 QQ 邮箱网页登陆密码!!!)。其他配置复制就可以。
Step 2:生成 mailable
类,设置邮件 view 并将视图中需要的用户数据传递到邮件 view
运行:
php artisan make:mail SendConfimrEmail
生成的 SendConfirmEmail.php
位于app/Mail
目录下。
在 SendConfirmEmail.php
中需要进行以下 4 处内容添加:
添加
use App\User
定义 public $user
在
__construct()
中给$user
赋值在
build()
方法中返回邮件view
说明: public $user
和$this->user = $user
用于传递数据给邮件 view。请参阅官方文档
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
use App\User;
class verificationEmail extends Mailable
{
use Queueable, SerializesModels;
public $user;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct(User $user)
{
//
$this->user = $user;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.email_verify');
}
}
emails.email_verify
为事先写好的email view。具体内容可参考以下:
@section('content')
<div class="card col-md-4 container">
<div class="card-body">
<h4 class="card-title">Email Verification</h4>
<p>
请点击下面的链接验证电子邮箱:
<a href="{{ route('email_verification', $user->activation_token) }}">
{{ route('email_verification', $user->activation_token) }}
</a>
</p>
<p>
如非人的操作,请忽略此邮件。
</p>
</div>
</div>
@stop
最后在任何需要发送邮件的地方添加:
Mail::to($user)
->send(new verificationEmail($user));</pre>