使用 Email 套件
Email 套件只需要你三樣東西便可開始发送電子郵件。
- 「发送來源」地址。
- 发送對象地址。
- 以及最後但并非最不重要的,訊息。
让我們來发送郵件。
// 建立一个實例
$email = Email::forge();
// 設定來源地址
$email->from('my@email.me', 'My Name');
// 設定接收地址
$email->to('receiver@elsewhere.co.uk', 'Johny Squid');
// 設定一个主題
$email->subject('This is the subject');
// 設定多个接收地址
$email->to(array(
'example@mail.com',
'another@mail.com' => 'With a Name',
));
// 并且設定主體。
$email->body('This is my message');
在这裡我們已经准備好開始发送郵件。
例外
发送郵件時,你可能会遭遇兩種类型的例外。
- \EmailValidationFailedException:當一个或多个電子郵件地址未通過驗證時拋出。
- \EmailSendingFailedException, 當驅动程序发送失敗時拋出
下面的例子顯示了如何处理例外。
try
{
$email->send();
}
catch(\EmailValidationFailedException $e)
{
// 驗證失敗
}
catch(\EmailSendingFailedException $e)
{
// 驅动程序無法发送信件
}
HTML 郵件。
发送 HTML 郵件與发送一般郵件并沒有太大不同:
// 設定一个 html 主體訊息
$email->html_body(\View::forge('email/template', $email_data));
/** 預設情況下也会從 html 產生一个替代的主體,
并附加任何內嵌档案(不像 http://... 的路徑) **/
// 設定一个替代的主體,这是選擇性的。
$email->alt_body('This is my alt body, for non-html viewers.');
附件
Email 套件支援兩種附件:一般(附件)與內嵌。使用一个內嵌附件, 如果你想在郵件裡使用它的話。例如你可能想在你的郵件裡有一个圖形,并且你想要人們也能在離線看見。 有些客戶端并不快取,是的这很愚蠢。但它是跨網发生这樣的東西。
// 添加一个附件
$email->attach(DOCROOT.'dir/my_img.png');
// 添加一个內嵌附件
// 在这裡添加一个 cid 指向主體
$email->attach(DOCROOT.'dir/my_img.png', true, 'cid:my_conten_id');
你也可以添加字串附件:
$contents = file_get_contents($my_file);
$email->string_attach($contents, $filename);
預設情況下,HTML 圖片会自动引入,但只引入本地档案。 看看以下的 HTML 以了解它如何運作。
<!-- 这会被引入 -->
<img src="path/to/my/file.png" />
<!-- 这不会被引入 -->
<img src="http://remote_host/file.jpeg" />
<!-- 这不会被引入 -->
<img src="cid:my_conten_id" />
你所看見最後的标籤(帶有 cid:)也不会被引入。在这種情況下,郵件希望你自己使用內嵌附件附加文件。
優先權
透過使用 priority 方法修改一个郵件的優先權。
$email->priority(\Email::P_HIGH);
流水線
流水線是一个你可以一次发送多封 email 的機制。
$email->pipelining($true);
啟用後,你可以使用相同的 $email
物件來建構并发送多封 email,在使用相同的連線到郵件伺服器。
你應該諮詢你的郵件伺服器託管公司來了解这是否是允許的,以及你在单一流水線可以送出 email 的最大数量。
大多数的主機商限制一个特定数量,之後伺服器斷開連線。
目前,只有 SMTP 驅动支援流水線。
驅动
Mailgun 驅动
Mailgun 是一个由 Rackspace 提供,能让你依需求量发送電子郵件的服務。你会需要在你的 FuelPHP 中用 composer 安装 Mailgun 函式庫。
添加下一行到你的 composer.json 档案并执行更新
"mailgun/mailgun-php": "1.6"
$ composer update
一旦你安装了套件,你必須要为你的 App 設置配置。
/**
* 覆蓋預設 Email.php 配置
*/
return array(
'defaults' => array(
'driver' => 'mailgun',
'mailgun' => array(
'key' => 'YOUR KEY',
'domain' => 'YOUR DOMAIN'
),
),
);