Laravel5.2 發送郵件(smtp方式最簡單的講解!)-郵件部分

https://blog.csdn.net/wulove52/article/details/71172842php

Laravel集成了SwiftMailer庫進行郵件發送郵件配置文件位於config/mail.PHP:、python

 

[python]  view plain  copy
 
  1. return [  
  2.     'driver' => env('MAIL_DRIVER''smtp'),  
  3.     'host' => env('MAIL_HOST''smtp.mailgun.org'),  
  4.     'port' => env('MAIL_PORT'587),  
  5.     'from' => ['address' => null, 'name' => null],  
  6.     'encryption' => env('MAIL_ENCRYPTION''tls'),  
  7.     'username' => env('MAIL_USERNAME'),  
  8.     'password' => env('MAIL_PASSWORD'),  
  9.     'sendmail' => '/usr/sbin/sendmail -bs',  
  10.     'pretend' => false,  
  11. ]  


  以上的參數  咱們都會有詳細的講解!  請繼續往下看!linux

driver用於配置默認的郵件發送驅動,Laravel支持多種郵件驅動方式,包括smtpMailgunMaildrillAmazon SESmailsendmail,Mailgun和Amazon SES都是收費的,Maildrill目前不支持中國區用戶,這三個都是第三方郵件服務。mail驅動使用PHP提供的mail函數發送,sendmail驅動經過Sendmail/Postfix(Linux)提供的命令發送郵件,smtp驅動經過支持ESMTP的SMTP發送郵件。laravel

注:ESMTP即Extended SMTP, 是對標準 SMTP 協議進行的擴展,它與 SMTP 服務的區別僅僅是,使用 SMTP 發信不須要驗證用戶賬戶,而用 ESMTP 發信時,服務器會要求用戶提供用戶名和密碼以便驗證身份。swift

就目前情況來看,使用smtp是最明智的選擇,mail不安全,sendmail須要安裝配置Sendmail/Postfix,其餘要麼付費要麼不能用(汗!)。下面其它配置的說明都基於driversmtp安全

接下來其餘的配置都好理解,host是郵箱所在主機,好比咱們使用163郵箱,對應值是smtp.163.com,使用QQ郵箱的話,對應值是smtp.qq.com服務器

port用於配置郵箱發送服務端口號,好比通常默認值是25,但若是設置SMTP使用SSL加密,該值爲465閉包

from配置項包含addressname,前者表示發送郵箱,後者表示發送郵件使用的用戶名。composer

encryption表示加密類型,能夠設置爲null表示不使用任何加密,也能夠設置爲tls/sslide

username表示郵箱帳號,好比yaojinbu@163.com

password表示上述郵箱登陸對應登陸密碼。

sendmail是在設置driversendmail時使用,用於指定sendmail命令路徑。

pretend用於配置是否將郵件發送記錄到日誌中,默認爲false則發送郵件不記錄日誌,若是爲true的話只記錄日誌不發送郵件,這一配置在本地開發中調試時頗有用。

 // 接下來咱們要作的就是要在控制器寫代碼了!

use Mail;

在方法中須要寫如下!

[python]  view plain  c
     public function send()  
        {  
            $name = 'vilin';  
            $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 = 'vilin';
$imgPath = 'http://laravelacademy.org/wp-statics/images/carousel/LaravelAcademy.jpg';
$flag = Mail::send('emails.test',['name'=>$name,'imgPath'=>$imgPath],function($message){

1.1 laravel發送郵件涉及的配置文件

    .env
    /config/mail.php

以上是laravel發送郵件兩個配置的地方,默認使用composer生成項目的時候,自動生成.env文件裏會有郵箱的配置字段,以下:

    MAIL_DRIVER=smtp
    MAIL_HOST=mailtrap.io
    MAIL_PORT=2525
    MAIL_USERNAME=null
    MAIL_PASSWORD=null
    MAIL_ENCRYPTION=null

以上這個幾個字段在mail.PHP文件中都有對應的字段,若是部署上線,僅僅配置了mail.php而沒有改.env文件裏的配置(除非沒有.env),那麼郵箱是發送不成功的,由於.env文件會覆蓋mail.php文件字段,切記當心。

1.2 使用QQ郵箱smtp發送郵件問題

1.2.1 開啓QQ郵箱smtp和imap功能

在使用這個QQ郵箱發送以前你須要在所要發送郵箱的後臺開啓smtp和imap發送郵箱受權功能,不然將一直提示你沒有受權。若是想要顯示發送的記錄,則須要設置收取選項。設置位置,直接上圖:

至少你須要把POP3/SMTP服務開啓,否則發郵件那是天方夜譚啊。

開啓後,你還須要點擊下方的:「生成受權碼」,獲取一個可以登陸的動態密碼:

千萬千萬千萬記得,MAIL_PASSWORD填寫的並不是是發送郵箱的帳號密碼,而是到騰訊郵箱管理中心受權的動態密碼!!!

加密方式建議選擇選擇ssl保證數據安全,那麼最終.env郵件長這樣:

    MAIL_DRIVER=smtp
    MAIL_HOST=smtp.qq.com
    MAIL_PORT=465
    MAIL_USERNAME=[你的帳號]
    MAIL_PASSWORD=gzoyimtltnqsbdba
    MAIL_ENCRYPTION=ssl

 

mail.php配置文件中,你僅僅須要修改from字段

    return [
    'from' => ['address' => [MAIL_USERNAME], 'name' => '小王']
    ]

而後你就能夠愉快大發郵件啦:

5.2 發送郵件方式

 
  
\Mail::send('mail.index', [], function ($message) { $message->to(['chengxuyuan@qq.com'])->subject('公司未婚妹子數量報表統計');});

從5.3開始,發送郵件被抽象成了一個對象,若是使用laravel 5.3嚐鮮的,請移步官方最新文檔: https://laravel.com/docs/5.3/mail

//代碼實現例子

 $data = [];    
$flag = \Illuminate\Support\Facades\Mail::to('panxlmail@qq.com')->send(new \App\Mail\UserMail($data));
if($flag) {
echo '發送失敗';
} else {
echo '發送成功'; }
相關文章
相關標籤/搜索