Laravel集成了SwiftMailer庫進行郵件發送,郵件配置文件位於config/mail.php
:、php
return [ 'driver' => env('MAIL_DRIVER', 'smtp'), 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), 'port' => env('MAIL_PORT', 587), 'from' => ['address' => null, 'name' => null], 'encryption' => env('MAIL_ENCRYPTION', 'tls'), 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'sendmail' => '/usr/sbin/sendmail -bs', 'pretend' => false, ]
driver
用於配置默認的郵件發送驅動,Laravel支持多種郵件驅動方式,包括smtp
、Mailgun
、Maildrill
、Amazon SES
、mail
和sendmail
,Mailgun和Amazon SES都是收費的,Maildrill目前不支持中國區用戶,這三個都是第三方郵件服務。mail
驅動使用PHP提供的mail
函數發送,sendmail
驅動經過Sendmail/Postfix(Linux)提供的命令發送郵件,smtp
驅動經過支持ESMTP的SMTP發送郵件。python
注:ESMTP即Extended SMTP, 是對標準 SMTP 協議進行的擴展,它與 SMTP 服務的區別僅僅是,使用 SMTP 發信不須要驗證用戶賬戶,而用 ESMTP 發信時,服務器會要求用戶提供用戶名和密碼以便驗證身份。laravel
就目前情況來看,使用smtp
是最明智的選擇,mail
不安全,sendmail
須要安裝配置Sendmail/Postfix,其餘要麼付費要麼不能用(汗!)。下面其它配置的說明都基於driver
是smtp
。swift
接下來其餘的配置都好理解,host
是郵箱所在主機,好比咱們使用163郵箱,對應值是smtp.163.com
,使用QQ郵箱的話,對應值是smtp.qq.com
。安全
port
用於配置郵箱發送服務端口號,好比通常默認值是25
,但若是設置SMTP使用SSL加密,該值爲465
。服務器
from
配置項包含address
和name
,前者表示發送郵箱,後者表示發送郵件使用的用戶名。閉包
encryption
表示加密類型,能夠設置爲null
表示不使用任何加密,也能夠設置爲tls
/ssl
。函數
username
表示郵箱帳號,好比yaojinbu@163.compost
password
表示上述郵箱登陸對應登陸密碼。測試
sendmail
是在設置driver
爲sendmail
時使用,用於指定sendmail
命令路徑。
pretend
用於配置是否將郵件發送記錄到日誌中,默認爲false
則發送郵件不記錄日誌,若是爲true
的話只記錄日誌不發送郵件,這一配置在本地開發中調試時頗有用。
// 接下來咱們要作的就是要在控制器寫代碼了!
use Mail;
在方法中須要寫如下!
public function send() { $name = '學院君'; $flag = Mail::send('emails.test',['name'=>$name],function($message){ $to = '1072155122@qq.com'; $message ->to($to)->subject('測試郵件'); }); if($flag){ echo '發送郵件成功,請查收!'; }else{ echo '發送郵件失敗,請重試!'; } }
//Mail::send
須要傳遞三個參數,第一個是郵件視圖,第二個是傳入視圖的數據,第三個是一個閉包,該閉包中定義了收件人、抄送人(若是有的話)、郵件主題、附件等信息。郵件的主體內容位於局部視圖中,下面咱們就來定義這個局部視圖,在resources/views/admin
目錄下新建test.blade.php
,編輯其內容以下:
// 以上是單純的文本發送/! 可是還不是帶有圖片發送的格式! 須要發送圖片的格式的! 須要繼續往下繼續看!
//這裏是view成! 須要一下這麼輸入!
{{$name}},這是一封測試郵件 <br> <img src="{{$message->embed($imgPath)}}">
// 圖片的發送和文本的發送 沒有什麼其餘不同的! 而是在參數後面多寫了一個參數! 一個簡單的圖片發送的文件就行了!
$name = '學院君'; $imgPath = 'http://laravelacademy.org/wp-statics/images/carousel/LaravelAcademy.jpg'; $flag = Mail::send('emails.test',['name'=>$name,'imgPath'=>$imgPath],function($message){