如何重用电子邮件的 JIRA 速度模板?

How to reuse the JIRA velocity templates for emails?

我想更改 JIRA 的通知行为并向某些问题事件添加额外的接收者。我知道我可以注册 EventPublisher 并捕获所有必要的事件。

public class MyIssueCreatedResolvedListenerImpl implements InitializingBean, DisposableBean {
    private final EventPublisher eventPublisher;

    public MyIssueCreatedResolvedListenerImpl(EventPublisher eventPublisher) {
        this.eventPublisher = eventPublisher;
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        eventPublisher.register(this);
    }

    @Override
    public void destroy() throws Exception {
        eventPublisher.unregister(this);
    }

    @EventListener
    public void onIssueEvent(IssueEvent issueEvent) {
        // Process the issue events. I'm using the code presented below.
    }
}

onIssueEvent 中,我想重用 JIRA 中现有的电子邮件模板,并将它们与 SMTPMailServer 对象一起发送给更多的接收者。目前我正在使用以下代码读取和填充速度模板。

ApplicationProperties ap = ComponentAccessor.getApplicationProperties();
String baseUrl = ap.getString(APKeys.JIRA_BASEURL);
String webworkEncoding = ap.getString(APKeys.JIRA_WEBWORK_ENCODING);

VelocityManager vm = ComponentAccessor.getVelocityManager();
VelocityParamFactory vp = ComponentAccessor.getVelocityParamFactory();

Map context = vp.getDefaultVelocityParams();
context.put("baseurl", baseUrl);
context.put("currentTimestamp", new Date());
context.put("issue", issueEvent.getIssue());

String renderedText = vm.getEncodedBody("templates/email/html/", "issueclosed.vm", baseUrl, webworkEncoding, context);

SMTPMailServer mailServer = MailFactory.getServerManager().getDefaultSMTPMailServer();

Email email = new Email("<E-Mail-Adress>");
email.setMimeType("text/html");
email.setEncoding("utf-8");
email.setBody(renderedText);

try {
    mailServer.send(email);
} catch (MailException e) {
    e.printStackTrace();
}

以上代码部分有效。填写了几个字段,但我仍然想念电子邮件通知中的 CSS、图像或 i18n。请注意,我不会使用市场上的任何附加插件。

couple of fields are filled, but I still miss the CSS, images or i18n

How Does Internationalisation Work?

在你实现国际化(也叫'i18n'因为'i'和'n'之间有18个字母)支持你的插件之前,它是了解插件如何国际化很重要。

首先,插件中的所有消息都必须从代码移到插件的属性文件中。属性文件存储插件内所有消息的默认(英语)翻译。 properties文件格式为key=value格式,其中key用于引用代码中的资源,value为默认的英文消息。

You can't use /images/ in your path unless you map the directory.

Including Javascript and CSS resources:

对于每个资源,资源的位置应与插件 JAR 文件中的资源路径相匹配。资源路径被命名为您的插件,因此它们不会与具有相同位置的其他插件中的资源发生冲突(不像 i18n 或 Velocity 资源)。但是,您可能会发现使用特定于您的插件的路径名与这些其他类型保持一致会很方便。

要在使用插件的页面中包含自定义 Web 资源,请使用 #requireResource Velocity 宏。