我的春季项目中有一个发送电子邮件的功能。 现在我想在那封电子邮件中发送png-image。
helper.addInline("myLogo", new ClassPathResource("resources/static/image/logo-mail.png"));
我的问题是:我如何将该图像文件提供给我的java类。 我试图将文件映射到我的控制器中的URL,但这不起作用。 谢谢! 问候
答案 0 :(得分:0)
问题是你想如何发送图像-inline,因为这正是你的助手类试图做的。
理想情况下,您应该使用此语法
来使用加载图像<img src="cid:imageName.png"></img>
接下来的问题是如何在电子邮件中获取图像 - 这就是您的问题所在?我建议将Spring JavaMailSender与Spring Resource接口结合起来,将图像数据加载并存储在生成的电子邮件中。
InputStreamSource imageSource = new ByteArrayResource(IOUtils.toByteArray(getClass().getResourceAsStream("/images/logo.png")))
JavaMailSender mailSender = new JavaMailSenderImpl(); // Or use Spring IoC to inject a pre-configured JavaMailSenderImpl MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "UTF-8"); // Add information to the message, such as subject, recipients, etc message.addInline("logo.png", imageSource);
MimeMessageHelper的addInline()方法从InputStreamSource读取字节数据,并创建内联MIME正文部分以保存附件。它还将内容ID设置为第一个参数提供的名称。现在,剩下的就是在我们的HTML正文中引用图像:
message.setText("<img src=\"cid:logo.png\"></img><div>My logo</div>", true);
答案 1 :(得分:0)
我以一种不同的方式解决:
public static final String LOGO_DIR="classpath:/static/images/icon64.png";
...
@Inject
private ApplicationContext context;
...
final Resource resource = context.getResource(EmailTemplateConstants.LOGO_DIR);
InputStreamSource logoSource = new ByteArrayResource(IOUtils.toByteArray(resource.getInputStream()));
message.addInline(EmailTemplateConstants.LOGO_NAME, logoSource,
EmailTemplateConstants.LOGO_CONTENT_TYPE);