(轉) Laravel自帶SMTP郵件組件實現發送郵件(QQ、16三、企業郵箱均可)

 

轉發:http://www.javashuo.com/article/p-oranifew-s.htmlphp

laravel自帶SMTP郵件配置和遇到的坑
laravel自帶SwiftMailer庫,集成了多種郵件API,能夠很方便的實現郵件的發送。在本教程中使用到的是SMTP(Simple Message Transfer Protocol)簡單郵件傳輸協議,一般理解爲郵件發送服務器。laravel

以QQ郵箱爲例
使用QQ郵箱的話,須要開啓POP3和SMTP服務(QQ郵箱登陸=》選擇設置=》帳戶=》下拉找到圖2)。
使用企業郵箱不用開啓SMTP,由於企業郵箱自帶,若是配置有問題去查一下是否關閉安全登陸(企業郵箱)
開啓方式以下:
數組

 

當開啓成功會生成密鑰,這個東西會在配置中用: 安全

 

 

 

配置laravel .env文件

MAIL_DRIVER=smtp
MAIL_HOST=smtp.qq.com
MAIL_PORT=465
MAIL_USERNAME=********@qq.com
MAIL_PASSWORD=qq郵箱此處填寫上圖產生的受權碼
MAIL_FROM_NAME=郵箱的名稱
MAIL_ENCRYPTION=ssl

配置laravel config/mail.php文件

這文件是laravel自帶的文件,若是沒有需求,內容可不動服務器

 

return [
    'driver' => env('MAIL_DRIVER', 'smtp'),
    'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
    'port' => env('MAIL_PORT', 587),
    'from' => [
        'address' => env("MAIL_USERNAME", ""),
        'name' => env("MAIL_FROM_NAME")
    ],
    'encryption' => env('MAIL_ENCRYPTION'),
    'username' => env('MAIL_USERNAME'),
    'password' => env('MAIL_PASSWORD'),
    'sendmail' => '/usr/sbin/sendmail -bs',
    'pretend' => env('MAIL_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發送郵件。就目前情況來看,使用smtp是最明智的選擇,mail不安全,sendmail須要安裝配置Sendmail/Postfix,其餘要麼付費要麼不能用。
host:郵箱所在主機,使用163郵箱,對應值是smtp.163.com,使用QQ郵箱,對應值是smtp.qq.com。使用騰訊企業郵箱,對應值是smtp.exmail.qq.com
port:用於配置郵箱發送服務端口號,通常默認值是25,但若是設置SMTP使用SSL加密,該值爲465。
from:配置項包含address和name,前者表示你本身的郵箱,後者表示你郵件用戶名(這裏郵箱,是用來發郵件的郵箱)。
encryption:表示加密類型,能夠設置爲null表示不使用任何加密,也能夠設置爲tls或ssl。
username: 表示郵箱帳號,好比123456789@qq.com
password 表示上述郵箱登陸對應登陸密碼。注意QQ郵箱的話應該開啓POP3|SMTP服務時給的受權碼。
sendmail: 是在設置driver爲sendmail時使用,用於指定sendmail命令路徑。
pretend: 用於配置是否將郵件發送記錄到日誌中,默認爲false則發送郵件不記錄日誌,若是爲true的話只記錄日誌不發送郵件,這一配置在本地開發中調試時頗有用

閉包

 

開始代碼之旅

生成控制器

php artisan make::controller MailController

配置路由

Route::any('mail/send','MailController@send');

在app/Http/Controllers生成了一個MailController控制器,以下所示:

<?php 
    namespace App\Http\Controllers; 
    use App\Http\Requests; 
    class MailController extends Controller { 
        //
     } 

編輯上面控制器,加入如下的邏輯處理:app

use Mail;
class MailController{ 
    public function send() {
     $name = '我發的第一份郵件'; 
     // Mail::send()的返回值爲空,因此能夠其餘方法進行判斷 
     Mail::send('emails.test',['name'=>$name],function($message){ 
     $to = '123456789@qq.com'; $message ->to($to)->subject('郵件測試'); 
     }); 
     // 返回的一個錯誤數組,利用此能夠判斷是否發送成功
      dd(Mail::failures());
    } 
} 

Mail::send();須要傳三個參數,第一個爲引用的模板,第二個爲給模板傳遞的變量(郵箱發送的文本內容),第三個爲一個閉包,參數綁定Mail類的一個實例。函數

在resources/emails下建立一個模板文件。

{{$name}} hello world。

 

好,如今在服務器上進行測試了,在地址欄輸入http://localhost/mail/send(本身的訪問地址),發送成功。測試

1. 發送純文本郵件

Mail::raw('你好,我是PHP程序!', function ($message) {
    $to = '123456789@qq.com';
    $message ->to($to)->subject('純文本信息郵件測試');
});

 

2.郵件中發送附件

發生圖片:加密

{{$name}},這是一封測試郵件
<br>
<img src="{{$message->embedData($image,'test.jpg')}}">
public function send(){ 
    $image = Storage::get('images/obama.jpg'); //本地文件
    //$image = 'http://www.baidu.com/sousuo/pic/sdaadar24545ssqq22.jpg';//網上圖片
    Mail::send('emails.test',['image'=>$image],function($message){ 
        $to = '123456789@qq.com';
        $message->to($to)->subject('圖片測試'); 
    }); 
    if(count(Mail::failures()) < 1){
     echo '發送郵件成功,請查收!'; 
    }else{
     echo '發送郵件失敗,請重試!';
    } 
}

3. 郵件附件

public function sendFile(){ 
    $name = '我發的第一份郵件'; 
    Mail::send('emails.test',['name'=>$name],function($message){ 
        $to = '123456789@qq.com';
        $message->to($to)->subject('郵件測試'); 
        $attachment = storage_path('xls/files/test.xls');
         // 在郵件中上傳附件 
        $message->attach($attachment,['as'=>'中文文檔.xls']); 
    }); 
} 
$message的attach方法上傳附件,該方法第一個參數是附件地址,第二個參數爲一些額外參數,這裏咱們經過as指定附件在郵件中的顯示名稱。 

測試若是顯示文件名亂碼的話,就這樣寫

$message->attach($attachment,['as'=>"=?UTF-8?B?".base64_encode('中文文檔')."?=.xls"]);

好了,如今咱們的郵件發生功能已經基本知足全部客戶的需求了,歡迎小夥伴的留言和光顧,但願幫助每個踩坑的小夥伴,若是有哪裏不對的還但願各位小夥伴多多指出,若是對你請推薦給身邊的小夥伴,此博客會時常更新,感謝參考過的每個博客,謝謝這些前輩爲咱們填好的坑

開始代碼之旅

生成控制器

相關文章
相關標籤/搜索