Java Mail 较大的 base64 图像在 Linux 中具有换行符,导致它们在 Apple Mail.app 等客户端中失败

标签 java image email base64 jakarta-mail

我正在创建一封电子邮件,其中包含使用 base64 的嵌入式 QR 代码。该 QR 码的特征之一是在代码中心覆盖一个小 Logo 。以下是 2 个结果图像:

QR codes

带有 Logo 的图像约为 3kb,普通图像约为 400 字节。

我使用以下代码将它们嵌入到电子邮件中:

//I pre-encoded the QR codes into a Base64 string first WITHOUT any linebreaks.
PreencodedMimeBodyPart base64Body = new PreencodedMimeBodyPart("base64");
base64Body.setHeader("Content-ID", "<" + key + ">");
base64Body.setHeader("Content-Location", "image.png");
base64Body.setHeader("Content-Type", "image/png; name=\"image.png\"");
base64Body.setDisposition(MimeBodyPart.INLINE);
base64Body.setFileName("image.png");
base64Body.setContent(theEncodedBase64ImageString, "image/png");

当我使用我的开发机器(Mac)时,这实际上工作得很好,但是,当我将其部署到 Linux 服务器环境时,我发现换行符似乎被 secret 添加到 base64 字符串中,导致其显示不正确在 Apple 的 Mail.app 中。在gmail中查看时,同一封电子邮件可以正确显示二维码。图片在这里:

in different email clients

注意:这些图像与 GMAIL(左)和 Mail.app(右)上显示的图像相同(带有 GV Logo )。

我使用gmail检查了原始邮件内容,发现我的base64字符串中添加了换行符!

enter image description here

这些换行符仅发生在 Linux 服务器上,而不是我的开发 Mac 上。另外,当我生成没有 Logo 的二维码(400字节)时,我根本没有遇到这个错误。

我不确定哪些因素相关并导致了此问题。

  • 是操作系统吗?
  • 或者我正在使用的邮件服务器可能会以某种方式影响此问题(我在 Mac 上使用 smtp.gmail.com,在 Linux 服务器上使用网络邮件服务器)?
  • Linux 中的 base64 编码字符串是否有文件大小限制/长度?

任何正确方向的观点都将受到赞赏。

最佳答案

只要数据正确,换行符就不会有任何影响。

但是,如果您使用的是旧版本,则可能会遇到 JavaMail 错误。您在每台机器上使用什么版本的 JavaMail?

关于Java Mail 较大的 base64 图像在 Linux 中具有换行符,导致它们在 Apple Mail.app 等客户端中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22903232/

相关文章:

c# - 通过 http post 发送 base64 String 最终在 C# 中为空服务器端

Java 邮件在打开Folder.open 时卡住

firebase - firebase 中的电子邮件通知

java - 从 War 创建登录 Tomcat

java - JSP 页面不显示图片,即使它指向正确的目录?

ios - 如何在 Swift 中显示/转换 oData weblink 到 UIImage?

php - 使用 PHP 捕获服务器收到的电子邮件

带有可选冒号分隔符的时区的 Java DateTimeFormatter?

java - Apache Mina 执行器过滤器

java - <jsp :scriptlet> and <% %> 之间有什么区别吗