郵件

2018-12-17 10:54 更新

配置

Laravel 基于熱門的 SwiftMailer 函數(shù)庫之上,提供了一個(gè)簡(jiǎn)潔的 API。郵件配置文件為 config/mail.php,包含若干選項(xiàng),讓您可以更改 SMTP 主機(jī)、連接端口、憑證,也可以讓您對(duì)函數(shù)庫發(fā)送出去的所有消息配置全局的 from 地址。您可使用任何您想要的 SMTP 服務(wù)器。如果想使用 PHP mail                函數(shù)來發(fā)送郵件,您可以將配置文件中的 driver 更改為 mail。您也可以使用 sendmail 驅(qū)動(dòng)器。

API 驅(qū)動(dòng)

Laravel 也包含了 Mailgun 及 Mandrill HTTP API 的驅(qū)動(dòng)。這些 API 通常比 SMTP 服務(wù)器更簡(jiǎn)單快速。這兩套驅(qū)動(dòng)都需要在應(yīng)用程序中安裝 Guzzle 5 HTTP 函數(shù)庫。您可在 composer.josn 中加入下列代碼, 以便在應(yīng)用中加入 Guzzle 5:

"guzzlehttp/guzzle": "~5.0"

           

Mailgun 驅(qū)動(dòng)

要使用 Mailgun 驅(qū)動(dòng),請(qǐng)將 config/mail.php 配置文件中的 driver 選項(xiàng)配置為 mailgun。接下來,若 config/service.php 配置文件還不存在于您的應(yīng)用中,請(qǐng)建立此文件,并確認(rèn)其包含下列選項(xiàng):

'mailgun' => [
    'domain' => 'your-mailgun-domain',
    'secret' => 'your-mailgun-key',],

           

Mandrill 驅(qū)動(dòng)

要使用 Mandrill 驅(qū)動(dòng),將 config/mail.php 配置文件中的 driver 選項(xiàng)配置為 mandrill。接下來,若 config/service.php 配置文件還不存在于您的應(yīng)用中,請(qǐng)建立此文件,并確認(rèn)其包含下列選項(xiàng):

'mandrill' => [
    'secret' => 'your-mandrill-key',],

           

日志驅(qū)動(dòng)

若您的 config/mail.php 配置文件中的 driver 選項(xiàng)配置為 log ,所有的電子郵件都會(huì)被寫入日志文件,而不會(huì)真正寄給任何收件者。這主要用于快速的本地端除錯(cuò)及內(nèi)容驗(yàn)證。

           

基本用法

您可使用 Mail::send 方法來發(fā)送電子郵件消息:

Mail::send('emails.welcome', ['key' => 'value'], function($message){
    $message->to('foo@example.com', 'John Smith')->subject('Welcome!');});

           

傳入 send 方法的第一個(gè)參數(shù)為郵件視圖的名稱。第二個(gè)是傳遞給該視圖的數(shù)據(jù),通常是一個(gè)關(guān)聯(lián)式數(shù)組,讓視圖可通過 $key 來取得數(shù)據(jù)對(duì)象。第三個(gè)參數(shù)是一個(gè)閉包,可以對(duì) message 進(jìn)行各種配置。

注意: $message 變量總是會(huì)被傳入郵件視圖中,并且允許內(nèi)嵌附件。因此最好避免在您的視圖本體中傳入 message 變量。

除了 HTML 視圖外,您也可以指定使用純文本視圖:

Mail::send(['html.view', 'text.view'], $data, $callback);

           

或者,您可使用 htmltext 作為鍵值來指定單一類型的視圖:

Mail::send(['text' => 'view'], $data, $callback);

           

您也可以在郵件消息中指定其他選項(xiàng),例如副本收件者或附件:

Mail::send('emails.welcome', $data, function($message){
    $message->from('us@example.com', 'Laravel');

    $message->to('foo@example.com')->cc('bar@example.com');

    $message->attach($pathToFile);});

           

要附加文件至 message 時(shí),可以指定 MIME 的類型、顯示名稱:

$message->attach($pathToFile, ['as' => $display], 'mime' => $mime));

           

若您只需發(fā)送一個(gè)簡(jiǎn)單的字串而非完整的視圖,可使用 raw 方法:

Mail::raw('Text to e-mail', function($message){
    $message->from('us@example.com', 'Laravel');

    $message->to('foo@example.com')->cc('bar@example.com');});

           

注意: 傳遞至 Mail::send 閉包的 message 實(shí)例是繼承了 SwiftMailer 的 message 類,你可以調(diào)用該類的任何方法來建立電子郵件消息。

           

內(nèi)嵌附件

在電子郵件中嵌入內(nèi)部圖像通常很麻煩;然而 Laravel 提供一個(gè)便利的方法讓您對(duì)電子郵件附加圖像,并取得相應(yīng)的 CID。

在郵件視圖中嵌入圖像

<body>
    這是一張圖像:    <img src="<?php echo $message->embed($pathToFile); ?>"></body>

           

在郵件視圖中嵌入原始數(shù)據(jù)

<body>
    這是一張從原始數(shù)據(jù)來的圖像:    <img src="<?php echo $message->embedData($data, $name); ?>"></body>

           

請(qǐng)注意 Mail 類總是會(huì)將 $message 變量傳遞給電子郵件視圖。

           

郵件隊(duì)列

將郵件消息加入隊(duì)列

發(fā)送電子郵件消息會(huì)大幅延長應(yīng)用程序的響應(yīng)時(shí)間,因此許多開發(fā)者選擇將郵件消息加入隊(duì)列并于后臺(tái)發(fā)送。 Laravel 使用內(nèi)置 統(tǒng)一的 queue API ,讓您輕松地完成此工作。要將郵件消息加入隊(duì)列,只要使用 Mail 類的 queue 方法:

Mail::queue('emails.welcome', $data, function($message){
    $message->to('foo@example.com', 'John Smith')->subject('Welcome!');});

           

您也可以使用 later 方法來指定您希望延遲發(fā)送郵件消息的秒數(shù):

Mail::later(5, 'emails.welcome', $data, function($message){
    $message->to('foo@example.com', 'John Smith')->subject('Welcome!');});

           

若您想要指定特定的隊(duì)列或「管道」來加入消息,您可使用 queueOn 以及 laterOn 方法:

Mail::queueOn('queue-name', 'emails.welcome', $data, function($message){
    $message->to('foo@example.com', 'John Smith')->subject('Welcome!');});

           

           

郵件與本地端開發(fā)

當(dāng)開發(fā)發(fā)送電子郵件的應(yīng)用程序時(shí),我們通常希望不要真的從本地端或開發(fā)環(huán)境發(fā)送郵件。您可以使用 Mail::pretend 方法或?qū)?config/mail.php 配置文件中的 pretend 選項(xiàng)配置為 true。在 pretend 模式下,消息會(huì)改而寫入應(yīng)用程序的日志文件,而不會(huì)真的發(fā)送給收件者。

若您想要實(shí)際閱覽測(cè)試的郵件,可考慮使用如 MailTrap 的服務(wù)。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)