损坏的/发件箱

CodeIgniter 4 的电子邮件工具包

v2.1.1 2022-07-22 20:33 UTC

README

CodeIgniter 4 的电子邮件工具包

Coverage Status

快速开始

  1. 使用 Composer 安装: > composer require tatter/outbox
  2. 准备数据库: > php spark migrate -all && php spark db:seed "Tatter\Outbox\Database\Seeds\TemplateSeeder"
  3. 发送漂亮的、动态的电子邮件
model(TemplateModel::class)->findByName('Default')
	->email([
		'item' => 'Fancy Purse',
		'cost' => '10 dollars',
		'url'  => site_url('items/show/' . $itemId),
	])
	->setTo($user->email)
	->send();

功能

Outbox 提供了有用的工具来补充框架的本地 Email 类:日志记录、样式内联和模板。

安装

通过 Composer 安装,利用 CodeIgniter 4 的自动加载功能,并始终保持最新状态

composer require tatter/outbox

或者,通过下载源文件并将目录添加到 app/Config/Autoload.php 来手动安装。

配置(可选)

可以通过扩展其配置文件来更改库的默认行为。将 examples/Outbox.php 复制到 app/Config/,并遵循注释中的说明。如果在 app/Config 中找不到配置文件,则库将使用其自己的配置。

如果您计划使用模板路由(见下文),则可能还需要配置 Tatter\Layouts,以确保您的应用正确显示视图。

使用

日志记录

默认情况下,Outbox 将记录任何成功发送的电子邮件到数据库中。这为向用户发送各种状态和通信消息的应用程序提供了一个方便的纸迹。使用 Tatter\Outbox\Models\EmailModel 和相应的实体来查看电子邮件日志。

内联

发送 HTML 电子邮件可能很棘手,因为 HTML 和 CSS 在各种显示设备和设备上的支持情况各不相同。 Outbox 包含了 tijsverkoyen 的模块 CssToInlineStyles,可以将任何 CSS 注入到电子邮件模板中,以实现最大兼容性。这允许您重用网站样式表或从头开始编写并使用它们在任何模板中。使用来自 Responsive HTML Email Template 的默认样式,提供自己的字符串参数,或创建一个视图文件并将其添加到配置中。

模板

Outbox 附带了一个默认模板,这是对 Responsive HTML Email Template 的修改版,适用于 CodeIgniter。这为您提供了电子邮件的坚实基础,确保它们在任何设备上都能良好显示。运行模板播种器以开始使用此作为默认模板

	php spark db:seed "Tatter\Outbox\Database\Seeds\TemplateSeeder"

您也可以编写自己的模板并将它们播种或使用提供的 MVC 包来管理数据库中的电子邮件模板。要启用控制器,您需要在配置中切换 $routeTemplates,或将以下路由添加到 app/Config/Routes.php

// Routes to Email Templates
$routes->group('emails', ['namespace' => '\Tatter\Outbox\Controllers'], function ($routes)
{
	$routes->get('templates/new/(:segment)', 'Templates::new/$1');
	$routes->get('templates/send/(:segment)', 'Templates::send/$1');
	$routes->post('templates/send/(:segment)', 'Templates::send_commit/$1');
	$routes->presenter('templates', ['controller' => 'Templates']);
});

请确保对这些路由进行适当的访问控制(例如,使用过滤器)。

令牌

模板使用视图解析器 "令牌",这些令牌将传递到添加您的数据。您可以通过传递数据参数来让 Template 实体为您这样做

$template = model(TemplateModel::class)->findByName('Item Purchase');

$subject = $template->renderSubject(['item' => 'Fancy Purse']);
$body    = $template->renderBody(['cost' => '10 dollars']);

renderBody() 将处理内联任何您提供的 CSS 并将模板包含在其父元素中(如果已定义)。

如果您不需要其他配置,您可以从库中获取一个完全准备好的Email类的版本,其中包含渲染和内联的内容

$email = $template->email($data);
$email->setTo('jill@example.com')->send();

级联模板

每个Template也可以使用“父模板”创建。父模板需要有一个{body}令牌,它将接收从其子模板解析的内容。父模板中可以定义额外的令牌,在子模板中输入。

级联模板使得拥有几个“布局”并且每个布局有许多不同的变量消息变得容易。例如,您的应用可能发送新闻简报和收据,它们有各自的布局(父模板),然后为不同场合提供无数可定制的消息。