使用Spring MVC应用程序发送带有图片的Velocity模板电子邮件

3

我想知道在使用Velocity的Spring MVC应用程序中发送带有图像的电子邮件的最佳方法。

图像应该在应用程序中,可能与*.vm模板位于同一位置(例如src/main/resources/templates),不应使用绝对路径(例如C:\ App ...),这就是为什么我无法弄清楚如何做到这一点。

有什么建议吗?


嗨,我想你已经解决了你的问题。为什么不接受你最喜欢的答案呢?它不是很有帮助吗? - javanna
2
我用第三种方法解决了它 :) 我使用final Map<String, Object> model = new HashMap<String, Object>();将模板中的图片链接添加到了模型中,然后使用model.put("urlLogo", urlLogo);,最后使用VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "emailTemplates/template.vm", model); - Martin Spa
很好,您可以将您的解决方案作为新答案添加并接受它。 - javanna
我会做到,此外需要注意的是,该解决方案来自于《Spring实战》一书,第14章“杂项”标题:“发送电子邮件”。 - Martin Spa
嗨Martin Spa,你能提供解决方法的源代码吗?我现在遇到了问题。谢谢。 - sudo
2个回答

4

您需要了解图片和电子邮件如何共同工作。在这方面我不是专家,但我认为有以下几种选择:

  • 将图片作为电子邮件的附件(我认为这样做很糟糕,而且会消耗大量带宽)
  • 发送HTML电子邮件并链接到托管在互联网上的图像

请查看org.springframework.mail.javamail.MimeMessageHelper。


2

使用Spring框架,你可以轻松地从文件系统或classpath(甚至jar包中)加载资源,而无需使用绝对路径。你应该使用Resource及其实现,主要有FileSystemResourceClasspathResource

以下是一个示例:

Resource fileResource = new FileSystemResource("resources/templates");

加载后,您可以直接从资源实例中检索输入流。

此外,您可以将相对路径注入到具有类型为 Resource 的实例属性的 bean 中:

<bean id="mailer" class="test.Mailer">
    <property name="templateResource" value="file:resource/templates" />
</bean>

虽然我不使用Velocity,但我通常会以这种方式加载模板,使用freemarker生成动态内容。一旦你加载了图片,你也可以将其附加到电子邮件中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接