Laravel 基于熱門的SwiftMailer 函數(shù)庫之上,提供了一個簡潔的 API。郵件配置文件為config/mail.php
,包含若干選項,讓您可以更改 SMTP 主機、連接端口、憑證,也可以讓您對函數(shù)庫發(fā)送出去的所有消息配置全局的from
地址。您可使用任何您想要的 SMTP 服務器。如果想使用 PHPmail
函數(shù)來發(fā)送郵件,您可以將配置文件中的driver
更改為mail
。您也可以使用sendmail
驅動器。
Laravel 也包含了 Mailgun 及 Mandrill HTTP API 的驅動。這些 API 通常比 SMTP 服務器更簡單快速。這兩套驅動都需要在應用程序中安裝 Guzzle 4 HTTP 函數(shù)庫。您可在composer.josn
中加入下列代碼, 以便在應用中加入 Guzzle 4:
"guzzlehttp/guzzle": "~4.0"
要使用 Mailgun 驅動,請將config/mail.php
配置文件中的driver
選項配置為mailgun
。接下來,若config/service.php
配置文件還不存在于您的應用中,請建立此文件,并確認其包含下列選項:
'mailgun' => array(
'domain' => 'your-mailgun-domain',
'secret' => 'your-mailgun-key',
),
要使用 Mandrill 驅動,將config/mail.php
配置文件中的driver
選項配置為mandrill
。接下來,若config/service.php
配置文件還不存在于您的應用中,請建立此文件,并確認其包含下列選項:
'mandrill' => array(
'secret' => 'your-mandrill-key',
),
若您的config/mail.php
配置文件中的driver
選項配置為log
,所有的電子郵件都會被寫入日志文件,而不會真正寄給任何收件者。這主要用于快速的本地端除錯及內容驗證。
您可使用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ù),通常是一個關聯(lián)式數(shù)組,讓視圖可通過$key
來取得數(shù)據(jù)對象。第三個參數(shù)是一個閉包,可以對 message 進行各種配置。
注意:
$message
變量總是會被傳入郵件視圖中,并且允許內嵌附件。因此最好避免在您的視圖本體中傳入message
變量。
除了 HTML 視圖外,您也可以指定使用純文本視圖:
Mail::send(array('html.view', 'text.view'), $data, $callback);
或者,您可使用html
或text
作為鍵值來指定單一類型的視圖:
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 類,你可以調用該類的任何方法來建立電子郵件消息。
在電子郵件中嵌入內部圖像通常很麻煩;然而 Laravel 提供一個便利的方法讓您對電子郵件附加圖像,并取得相應的 CID。
<body>
這是一張圖像:
<img src="<?php echo $message->embed($pathToFile); ?>">
</body>
<body>
這是一張從原始數(shù)據(jù)來的圖像:
<img src="<?php echo $message->embedData($data, $name); ?>">
</body>
請注意Mail
類總是會將$message
變量傳遞給電子郵件視圖。
發(fā)送電子郵件消息會大幅延長應用程序的響應時間,因此許多開發(fā)者選擇將郵件消息加入隊列并于后臺發(fā)送。 Laravel 使用內置統(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ā)環(huán)境發(fā)送郵件。您可以使用Mail::pretend
方法或將config/mail.php
配置文件中的pretend
選項配置為true
。在pretend
模式下,消息會改而寫入應用程序的日志文件,而不會真的發(fā)送給收件者。
若您想要實際閱覽測試的郵件,可考慮使用如MailTrap 的服務。