鍍金池/ 教程/ PHP/ 郵件
Laravel Cashier
Eloquent ORM
HTTP 響應
發(fā)行說明
擴展包開發(fā)
HTTP 控制器
事件
擴展框架
Contracts
開發(fā)
配置
表單驗證
錯誤與日志
Hashing
貢獻指南
郵件
Session
遷移與數(shù)據(jù)填充
查詢構(gòu)造器
Redis
升級向?qū)?/span>
概覽
緩存
服務提供者
Envoy 任務執(zhí)行器
隊列
單元測試
服務容器
文件系統(tǒng) / 云存儲
認證
請求的生命周期
加密
模板
視圖 (View)
Laravel Homestead
Laravel 安裝指南
介紹
Command Bus
分頁
輔助方法
應用程序結(jié)構(gòu)
HTTP 路由
HTTP 請求
基本用法
本地化
HTTP 中間件
結(jié)構(gòu)生成器
Facades
Laravel Elixir

郵件

配置

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

API 驅(qū)動

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

"guzzlehttp/guzzle": "~4.0"

Mailgun 驅(qū)動

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

'mailgun' => array(
    'domain' => 'your-mailgun-domain',
    'secret' => 'your-mailgun-key',
),

Mandrill 驅(qū)動

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

'mandrill' => array(
    'secret' => 'your-mandrill-key',
),

日志驅(qū)動

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

基本用法

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

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

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

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

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

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

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

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

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

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 時,可以指定 MIME 的類型、顯示名稱:

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

若您只需發(fā)送一個簡單的字串而非完整的視圖,可使用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 實例是繼承了 SwiftMailer 的 message 類,你可以調(diào)用該類的任何方法來建立電子郵件消息。

內(nèi)嵌附件

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

在郵件視圖中嵌入圖像

  <body>
      這是一張圖像:

      <img src="<?php echo $message->embed($pathToFile); ?>">
  </body>

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

  <body>
      這是一張從原始數(shù)據(jù)來的圖像:

      <img src="<?php echo $message->embedData($data, $name); ?>">
  </body>

請注意Mail 類總是會將$message 變量傳遞給電子郵件視圖。

郵件隊列

將郵件消息加入隊列

發(fā)送電子郵件消息會大幅延長應用程序的響應時間,因此許多開發(fā)者選擇將郵件消息加入隊列并于后臺發(fā)送。 Laravel 使用內(nèi)置統(tǒng)一的 queue API ,讓您輕松地完成此工作。要將郵件消息加入隊列,只要使用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!');
});

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

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

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

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

若您想要實際閱覽測試的郵件,可考慮使用如MailTrap 的服務。

上一篇:本地化下一篇:擴展包開發(fā)