开始使用
本章节介绍如何在应用程序中使用邮件模板。我们将创建一个简单的应用层管理用户的订阅。这个应用程序会在订阅生命周期事件发生时使用邮件模板发送邮件。
首先,按照 安装 部分的说明在项目中添加邮件模板扩展组件。
创建数据模型和界面
我们创建下列实体类:
- 
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 发送填写完成的邮件模板。 | 
启动应用程序,检查在创建了订阅之后会发送邮件。