Lumen 默认没有安装发送邮件的组件,接下来讲解使用SMTP驱动实现邮件发送的详细教程。

1. 安装发送邮件组件

执行如下命令安装邮件组件:

1
composer require illuminate\mail

2. 增加 config/mail.php 文件

由于 Lumen 的 config 目录下没有 mail.php 配置文件,所以需要手动添加:

1
2
3
4
5
6
7
8
9
<?php
return [
'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST'),
'port' => env('MAIL_PORT', 587),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
];

每个变量的含义如下:

  • driver 用于配置默认的邮件发送驱动,Laravel支持多种邮件驱动方式,包括smtp、Mailgun、Maildrill、Amazon SES、mail和sendmail。
  • host 是邮箱所在主机,比如我们使用163邮箱,对应值是smtp.163.com。
  • port 用于配置邮箱发送服务端口号,比如一般默认值是25,但如果设置SMTP使用SSL加密,该值为465。
  • username 表示邮箱账号,比如minhow@163.com。
  • password 表示上述邮箱登录对应登录密码。
  • encryption 表示加密类型,可以设置为null表示不使用任何加密,也可以设置为tls/ssl。

3. 修改.env,增加以下语句

按需要配置相对应的变量.

1
2
3
4
5
6
MAIL_DRIVER=smtp
MAIL_HOST=smtp.163.com
MAIL_PORT=465
MAIL_USERNAME=test@minhow.com
MAIL_PASSWORD=minhow
MAIL_ENCRYPTION=ssl

4. 修改 bootstrap/app.php,增加以下语句

1
2
$app->register(Illuminate\Mail\MailServiceProvider::class);
$app->withFacades();

5. 发送邮件

5.1 发送纯文本邮件
1
2
3
4
Mail::raw('MinHow', function ($message) {
$to = 'test@minhow.com';
$message ->to($to)->subject('测试邮件');
});
5.2 发送带附件的邮件(中文乱码解决)
1
2
3
4
5
6
7
$flag = Mail::send('emails.test', ['name' => $name], function($message) {
$to = 'test@minhow.com';
$message->to($to)->subject('测试邮件');
$attachment = storage_path('app/files/test.doc');
//在邮件中上传附件
$message->attach($attachment,['as'=>'测试文档.doc']);
});

从代码可知我们使用闭包中$message实例上的attach方法上传附件,该方法第一个参数是附件地址,第二个参数是一些额外参数,这里我们通过as指定附件在邮件中的显示名称。
这样在收件箱中可以看到附件,但附件名称出现中文乱码,解决办法如下:

1
$message->attach($attachment, ['as' => "=?UTF-8?B?" . base64_encode('测试文档') . "?=.doc"]);

通过以上处理后,就不会有中文乱码出现了。

最后更新: 2018年01月06日 17:07

原始链接: http://blog.minhow.com/2017/07/22/laravel/lumen-add-email/

× 请我吃糖~
打赏二维码