java - Spring 电子邮件 Mime Base64 图像

标签 java spring email spring-boot base64

我有一个 java/spring boot 应用程序,我希望能够从中发送电子邮件。电子邮件本身只是一堆文本,底部有一张图像。我收到了包含所有正确文本的电子邮件,但图像从未出现。这是我的代码:

MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, MULTIPART_MODE_RELATED);
helper.setFrom("test@gmail.com");
helper.setTo("testreceiver@gmail.com");
helper.setSubject("This is a test email from my app");

// This mail has 2 part, the BODY and the embedded image
MimeMultipart root = helper.getRootMimeMultipart();

// first part (the html)
BodyPart textPart = new MimeBodyPart();
textPart.setContent("Some cool html <bold>text</bold>", "text/html");
root.addBodyPart(textPart);

// second part (the image)
BodyPart imagePart = new PreencodedMimeBodyPart( "base64" );
imagePart.setHeader( "Content-ID", "<image>" );
imagePart.setDisposition( MimeBodyPart.INLINE );
imagePart.setText("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");
root.addBodyPart(imagePart);

message.setContent(root);
mailSender.send(message);

我做错了什么?

最佳答案

您可以生成图像的 base64 字符串并使用以下代码将其附加到电子邮件:

Path path = Paths.get("IMAGE_LOCATION");
byte[] bytes = Files.readAllBytes(path);
Encoder encoder = Base64.getEncoder();
String base64String = encoder.encodeToString(bytes);
String base64Image = "data:image/png;base64," + base64String;
System.out.println(base64Image);

以上代码考虑 PNG 图像的示例

关于java - Spring 电子邮件 Mime Base64 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45908684/

相关文章:

java - 如何在不同的类加载器中使用 Singleton 对象......?

java - 调整标题表中的列值大小以显示名称

java - 可传递参数的 Callable<T> 替代品

java - Spring Boot - 具有额外列的多对多关系的分页

php - 我可以使用 jQuery 将代码添加到 php 文档吗?

email - pear 邮件, "unable to set sender"

Java - 如何阻止嵌套循环检查相同的索引两次?

java - Spring 5,从 LDAP (AD) 获取信息

java - Spring security - 创建 403 访问被拒绝的自定义响应

php - 消息 : fsockopen(): unable to connect to ssl://smtp. googlemail.com:465(权限被拒绝)