使用 - Email 套件
优质
小牛编辑
133浏览
2023-12-01
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'
),
),
);