在 Laravel 5.6 使用SMTP驅動實現郵件發送

1. 配置文件

Laravel集成了SwiftMailer庫進行郵件發送,郵件配置文件位於config/mail.php

<?php

return [

    'driver' => env('MAIL_DRIVER', 'smtp'),     //配置默認的郵件發送驅動


    //host是郵箱所在主機,比如我們使用163郵箱,對應值是smtp.163.com,
    //使用QQ郵箱的話,對應值是smtp.qq.com
    'host' => env('MAIL_HOST', 'smtp.mailgun.org'),


    //port用於配置郵箱發送服務端口號,比如一般默認值是25,但如果設置SMTP使用SSL加密,該值爲465
    'port' => env('MAIL_PORT', 587),

    'from' => [
        'address' => env('MAIL_FROM_ADDRESS', '[email protected]'), //發送郵箱
        'name' => env('MAIL_FROM_NAME', 'Example'), //發送郵件使用的用戶名
    ],


    'encryption' => env('MAIL_ENCRYPTION', 'tls'),

    'username' => env('MAIL_USERNAME'),

    'password' => env('MAIL_PASSWORD'),



    'sendmail' => '/usr/sbin/sendmail -bs',
    
    'markdown' => [
        'theme' => 'default',

        'paths' => [
            resource_path('views/vendor/mail'),
        ],
    ],

];

我的配置:
env配置

2. 定義路由

爲我們的測試在routes.php定義路由規則:

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

3. 創建郵件發送控制器

php artisan make:controller MailController

純文本郵件發送可以使用Mail::raw方法

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Mail;


class MailController extends Controller
{
    public function send()
    {
		Mail::raw('這是一封測試郵件', function ($message) {
		    $to = '[email protected]';
		    $message ->to($to)->subject('測試郵件222222');
		});
    }
}

Mail::send需要傳遞三個參數,第一個是郵件視圖,第二個是傳入視圖的數據,第三個是一個閉包,該閉包中定義了收件人、抄送人(如果有的話)、郵件主題、附件等信息。郵件的主體內容位於局部視圖中,下面我們就來定義這個局部視圖,在resources/views/emails目錄下新建test.blade.php,編輯其內容如下:

{{ $name }} 哈哈哈哈

收到的郵件
使用Mail::send發送視圖郵件

    public function send()
    {
        $name = '我叫liang 你好啊';
        $flag = Mail::send('emails.test',['name'=>$name],function($message){
            $to = '[email protected]';
            $message->to($to)->subject('測試郵件22222');
        });

        if( count(Mail::failures()) > 0 ){
        	echo '發送郵件失敗,請重試!';
        }else{
             echo '發送郵件成功,請查收!';
        }
    }

收到的視圖郵件

使用make:mail生成郵件

php artisan make:mail OrderShipped

該命令會在 app/mail 目錄下生成一個繼承於Mailable的郵件類。類中的build方法用於構建郵件。

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.test');
    }

那麼怎麼向視圖傳遞數據呢?有兩種方法

  1. Mailable 類任何公共屬性都可以在視圖中使用
  2. 使用 with 方法來傳遞數據給模板
<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class OrderShipped extends Mailable
{
    use Queueable, SerializesModels;

    public $data;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($data)
    {
        $this->data = $data;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.test')->subject('Order Shipped')
                    ->with(['other' => '這是通過with方法攜帶的數據']);
    }
}

發送郵件

使用 Mail 門臉的 to 方法。 to 方法接受一個郵件地址,一個 user 實現或一個 users 集合。如果傳遞一個對象或集合,mailer 將自動使用 email 和 name 屬性來設置郵件收件人,所以確保你的對象裏有這些屬性。一旦指定收件人,你可以傳遞一個實現到 Mailable 類的 send 方法

    public function send()
    {
    	$data = '通過公共屬性發送的數據';

    	Mail::to('[email protected]')
    			->send(new OrderShipped($data));
    }

最終結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章