我尝试用ThymeLeaf和Spring发送一封带有内嵌图像的电子邮件,但到目前为止还没有成功。电子邮件发送了,但内嵌图像不会显示在电子邮件中。
该项目不是基于Web的(不是网站),而是一个独立的桌面,而不是移动的
这是我如何获得图像文件:
URL url = getClass().getResource("/LawFirmAdvisoryGroup.jpg");
File file = new File(url.getPath());
MultipartFile multipartFile = new MockMultipartFile(file.getName(),
file.getName(), "image/jpeg", IOUtils.toByteArray(input));
我的服务类别:
@Autowired
private JavaMailSender mailSender;
@Autowired
private TemplateEngine templateEngine;
public void sendMailWithInline(final String recipientName, final String recipientEmail, final MultipartFile image, final byte[] imageBytes)
throws MessagingException {
final Context ctx = new Context();
ctx.setVariable("imageResourceName", image.getName()); // so that we can reference it from HTML
final MimeMessage mimeMessage = this.mailSender.createMimeMessage();
final MimeMessageHelper message
= new MimeMessageHelper(mimeMessage, true, "UTF-8");
message.setSubject("Inline Image");
message.setFrom("XXXX@yahoo.com");
message.setTo(recipientEmail);
// Add the inline image, referenced from the HTML code as "cid:${imageResourceName}"
final InputStreamSource imageSource = new ByteArrayResource(imageBytes);
message.addInline(image.getName(), imageSource, image.getContentType());
final String htmlContent = this.templateEngine.process("left_sidebar.html", ctx);
message.setText(htmlContent, true);
this.mailSender.send(mimeMessage);
}
HTML:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title th:remove="all">Email with inline image</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p>
<img src="LawFirmAdvisoryGroup.jpg" th:src="'cid:' + ${imageResourceName}" />
</p>
</body>
</html>
3条答案
按热度按时间daupos2t1#
把你打到
setText()
的电话往上挪几行就行了。MimeMessageHelper.addInLine()
的javadoc说明:注意:在 *
setText(java.lang.String)
之后调用addInline
*;否则,邮件阅读器可能无法正确解析内联引用。k4emjkb12#
这非常有效:
只需添加一个链接到托管在远离桌面的外部服务器上的图像。使用内联CSS,而不是CSS类。
这个网站将帮助您转换CSS类到内联CSS,Premailer.Dialect.
避免任何花哨的CSS,只使用最基本的. floating(如float:left;)应该尽可能避免,如果你想让你的HTML邮件更容易流动,即使在移动设备和其他较小的屏幕。
在项目库中包含NekoHTML,并将Spring spring.xml更改为:
示例如下:
服务类别:
c6ubokkw3#