説明:
本人用的是Laravel5.5
我将以 163 邮箱为例,展示如何用 Laravel 内置的邮件发送类来发送邮件
163郵箱SMTP服务器地址:smtp.163.com(端口25)
注意:配置config/mail.php和.env配置文件時用的郵箱密碼要使用郵箱客户端授权密码,不用能常规的密码,否則會報錯
1.安裝Guzzle HTTP 函数库,使用 Composer 包管理器安装:
注意:安裝前將composer鏡像切換國内,安裝過程可能會報錯,可能是composer源的問題,多重複安裝幾遍
composer require guzzlehttp/guzzle
2.在 config/mail.php,修改以下配置:
建议在.env文件进行配置,默认的配置文件不要改动
'driver' => env('MAIL_DRIVER', 'smtp'), 'host' => env('MAIL_HOST', 'smtp.163.com'), 'port' => env('MAIL_PORT', 25), 'from' => [ 'address' => env('MAIL_FROM_ADDRESS', 'm1376075****@163.com'), 'name' => env('MAIL_FROM_NAME', 'm1376075****@163.com'), ], 'encryption' => env('MAIL_ENCRYPTION', 'tls'), 'username' => env('MAIL_USERNAME','m1376075****@163.com'), 'password' => env('MAIL_PASSWORD','****'),//這裏的密碼使用郵箱客户端授权密码,不用能常规的密码,本人在此踩過坑
3.配置.env文件
MAIL_DRIVER=smtp
MAIL_HOST=smtp.163.com
MAIL_PORT=25
MAIL_USERNAME=你的163邮箱地址
MAIL_PASSWORD=你的163邮箱地址对应的授权密码(不是登录密码)
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=你的163邮箱地址
MAIL_FROM_NAME=发送邮件使用的用户名
- driver用于配置默认的邮件发送驱动,我们用SMTP(Simple Message Transfer Protocol)简单邮件传输协议
- host是邮箱所在主机,比如我们使用163邮箱,对应值是smtp.163.com,使用QQ邮箱的话,对应值是smtp.qq.com
- port用于配置邮箱发送服务端口号,比如一般默认值是25,但如果设置SMTP使用SSL加密,该值为465
- username表示邮箱账号
- password表示上述邮箱对应的授权密码
- encryption表示加密类型,可以设置为null表示不使用任何加密,也可以设置为tls或ssl。
- from配置项包含address和name,前者表示发送邮箱,后者表示发送邮件使用的用户名。
使用163邮箱做的发送,需登录163邮箱开启POP3和SMTP服务,以及生成授权密码。
3.添加一個測試用路由
Route::group(['prefix' => 'admin'], function () { $namespacePrefix="\App\Http\Controllers\Admin\"; //mail 測試 Route::get('sendmail',['uses' => $namespacePrefix . 'EmailController@sendMail', 'as' => 'sendMail']); });
4.controller
<?php namespace AppHttpControllersAdmin; use IlluminateHttpRequest; use AppHttpControllersController; use IlluminateSupportFacadesMail; use AppMailSendEmail; class EmailController extends Controller { public $email_message = 'this is a test mail'; public function sendMail() { Mail::to('fgf163163@163.com')->send(new SendEmail($this->email_message)); return 'success'; } }
5.在AppMail下新建SendEmail.php
<?php namespace AppMail; use AppOrder; use IlluminateBusQueueable; use IlluminateMailMailable; use IlluminateQueueSerializesModels; class SendEmail extends Mailable { use Queueable, SerializesModels; /** * order 实例。 * * @var Order */ protected $email_message; /** * 创建一个新消息实例。 * * @return void */ public function __construct($email_message) { $this->email_message = $email_message; } /** * 构建消息。 * * @return $this */ public function build() { return $this->view('emails.test') ->with([ 'email_message' => $this->email_message, ]); } }
6.在resources/views/emails下新建test.blade.php模板文件
<!doctype html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> </head> <body> <div> {{$email_message}} </div> </body> </html>
7.訪問路由
http://127.0.0.1:8000/admin/sendmail
查看郵箱,是否收到郵件
文檔地址:https://learnku.com/docs/laravel/5.5/mail/1321
如果单纯发送纯文本邮件可以参考:https://blog.csdn.net/qq175023117/article/details/85317291