开始使用
本章节介绍如何在应用程序中使用邮件模板。我们将创建一个简单的应用层管理用户的订阅。这个应用程序会在订阅生命周期事件发生时使用邮件模板发送邮件。
首先,按照 安装 部分的说明在项目中添加邮件模板扩展组件。
创建数据模型和界面
我们创建下列实体类:
-
Customer实体,带有字段:-
firstName,为String类型。 -
lastName,为String类型。 -
email,为String类型。
-
-
Subscription实体,带有字段:-
name,为String类型。 -
active,为Boolean类型。 -
expiryDate,为Date类型。 -
customer关联至Customer,一对多。
-
为 Customer 和 Subscription 实体创建编辑和浏览界面。
创建邮件模板
我们用可视化设计器创建第一个模板。
启动应用程序,打开 Administration(管理) → Email templates(邮件模板) 界面,点击 Create(新建) → From designer(设计器) 按钮
然后会打开 Email template(邮件模板) 界面。修改下列字段:
-
Name(名称):
Subscription created。 -
Code(编码):
subscription_created。 -
Subject(标题):
Subscription created。
下面创建模板内容,可以从右侧的工具箱将需要的元素拖放至画布中。
我们的模板包含三个 section。
在第一个 section 中,我们添加公司的 logo 图片。找到 Image 元素并放置于第一个 section 中。
可以为图片提供一个链接或者从文件存储上传图片。
第二个 section 包含来自 “customer” 的信息。在模板中,我们可以使用模板参数,这些参数会自动创建。在 Text 元素中输入带参数掩码的信息:Hi, ${customer.firstName} ${customer.lastName}!
然后切换至 Parameters and formats(参数和格式) 标签页并点击 Create from template(从模板创建)。系统会创建一个别名为 customer,实体类型为 Customer 的模板参数。
可以为每个模板参数设置正确的参数类型,并配置其他值。
我们为模板中的参数定义一个格式。切换至 Main(主要信息) 标签页,在画布中添加 Text 元素。输入下列内容:Your subscription will be expired on ${subscription.expiryDate?string("YYYY-MM-dd")}。注意,我们将订阅的过期时间添加为模板参数,并使用特殊的值格式。
可以看到 Subscription 实体类型的 subscription 变量已经创建。
切换至 Main(主要信息) 标签页,在画布中添加 Text 元素。输入下列内容:Best regards, Сompany team。模板创建完成。
打开 Email templates(邮件模板) 浏览界面,选择刚创建的模板,并点击 Send(发送) 按钮。
填写必需的参数,然后点击 Preview(预览) 按钮,检查生成的邮件内容。
添加事件监听器
现在为应用程序加一些自动化处理的工作。
如需在订阅生命周期事件中自动发送模板邮件,我们需要创建事件监听器。在监听器中,当订阅创建时,我们使用邮件模板 API 发送 "Subscription created" 邮件。
@Component
public class SubscriptionEventListener {
private static final Logger log =
LoggerFactory.getLogger(SubscriptionEventListener.class);
@Inject
EmailTemplates emailTemplates; (1)
public static final String CREATED_TEMPLATE_CODE = "subscription_created";
@EventListener
void onSubscriptionSaving(EntitySavingEvent<Subscription> event) {
if (event.isNewEntity()) {
try {
emailTemplates.buildFromTemplate(CREATED_TEMPLATE_CODE)
.setTo(event.getEntity().getCustomer().getEmail()) (2)
.setBodyParameter("subscription", event.getEntity()) (3)
.setBodyParameter("customer", event.getEntity().getCustomer()) (4)
.sendEmail(); (5)
} catch (TemplateNotFoundException | EmailException |
ReportParameterTypeChangedException e) {
log.info(e.getMessage());
}
}
}
}
| 1 | EmailTemplates 提供流式构建器接口,可用于自定义邮件模板。 |
| 2 | 设置邮件模板的 to 属性。 |
| 3 | 设置 subscription 模板参数。 |
| 4 | 设置 customer 模板参数。 |
| 5 | 使用 io.jmix.email.Emailer 发送填写完成的邮件模板。 |
启动应用程序,检查在创建了订阅之后会发送邮件。