如何在邮件中重用JIRA速度模板? - java

我想更改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。请注意,我不会使用市场上的任何其他附加组件。

  • 这是重用JIRA模板的正确实现吗?
  • 如何包含CSS,图像,i18n等?还是可以使用其他方法?
  • 参考方案

    填充了几个字段,但我仍然想念CSS,图像或i18n

    How Does Internationalisation Work?

    在对插件实施国际化(也称为' i18n ',因为'i'和'n'之间有18个字母)支持之前,了解插件如何进行国际化很重要。

    首先,必须将插件中的所有消息移到代码外,然后放入插件的属性文件中。属性文件存储插件内所有消息的默认(英文)翻译。属性文件格式是键=值格式,其中键用于引用代码中的资源,值是英语中的默认消息。

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

    Including Javascript and CSS resources:

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

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

    Java-搜索字符串数组中的字符串 - java

    在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…

    Java Scanner读取文件的奇怪行为 - java

    因此,在使用Scanner类从文件读取内容时,我遇到了一个有趣的问题。基本上,我试图从目录中读取解析应用程序生成的多个输出文件,以计算一些准确性指标。基本上,我的代码只是遍历目录中的每个文件,并使用扫描仪将其打开以处理内容。无论出于何种原因,扫描程序都不会读取其中的一些文件(所有UTF-8编码)。即使文件不是空的,scanner.hasNextLine()在…

    Java:线程池如何将线程映射到可运行对象 - java

    试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

    JAVA:字节码和二进制有什么区别? - java

    java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

    java:继承 - java

    有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…