使用 Email 套件

Email 套件只需要你三樣東西便可開始发送電子郵件。

  1. 「发送來源」地址。
  2. 发送對象地址。
  3. 以及最後但并非最不重要的,訊息。

让我們來发送郵件。

// 建立一个實例
$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');

在这裡我們已经准備好開始发送郵件。

例外

发送郵件時,你可能会遭遇兩種类型的例外。

下面的例子顯示了如何处理例外。

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'
        ),
    ),
);