Java Mail更大的base64映像在Linux中有新行,导致它们在Apple';s Mail.app
我正在使用base64创建一封包含嵌入式二维码的电子邮件。该二维码的一个特点是在码的中心覆盖一个小徽标。以下是两张生成的图像: 带有徽标的图像约为3kb,普通图像约为400字节 我使用以下代码将它们嵌入到电子邮件中:Java Mail更大的base64映像在Linux中有新行,导致它们在Apple';s Mail.app,java,image,email,base64,jakarta-mail,Java,Image,Email,Base64,Jakarta Mail,我正在使用base64创建一封包含嵌入式二维码的电子邮件。该二维码的一个特点是在码的中心覆盖一个小徽标。以下是两张生成的图像: 带有徽标的图像约为3kb,普通图像约为400字节 我使用以下代码将它们嵌入到电子邮件中: //I pre-encoded the QR codes into a Base64 string first WITHOUT any linebreaks. PreencodedMimeBodyPart base64Body = new PreencodedMimeBodyPa
//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");
//我首先将QR码预编码为Base64字符串,没有任何换行符。
PreencodedMimeBodyPart base64Body=新PreencodedMimeBodyPart(“base64”);
base64Body.setHeader(“内容ID”,即“”);
base64Body.setHeader(“内容位置”、“image.png”);
base64Body.setHeader(“内容类型”,“图像/png;名称=\”图像.png\”);
base64Body.setDisposition(MimeBodyPart.INLINE);
base64Body.setFileName(“image.png”);
setContent(encodedbase64imagestring,“image/png”);
当我使用我的开发机器(Mac)时,这实际上可以很好地工作,但是,当我将它部署到Linux服务器环境时,我发现断线似乎被秘密添加到base64字符串中,导致它在Apple的Mail.app中不正确地显示。在gmail中查看时,同一封电子邮件会正确显示二维码。图片如下:
注意:这是GMAIL(左)和Mail.app(右)上显示的相同图像(带有GV徽标)
我用gmail检查了原始邮件内容,发现断行已经添加到我的base64字符串中
这些换行符只发生在Linux服务器上,而不是我的开发mac上。另外,当我生成没有徽标(400字节)的二维码时,我根本没有遇到这个错误
我不确定哪些因素是相关的,导致了这个问题
- 是操作系统吗李>
- 或者可能是我使用的邮件服务器以某种方式影响了这一点(我在mac上使用smtp.gmail.com,在Linux服务器上使用网络邮件服务器)
- Linux中base64编码字符串是否有文件大小/长度限制
只要数据正确,任何方向上的点都是值得赞赏的。换行符不应该有任何区别
但是,如果您使用的是旧版本,则可能会遇到JavaMail错误。您在每台机器上使用的是什么版本的JavaMail?主要问题是,显然,我使用的邮件服务器强制执行每行最多字符数。如果一行超过此限制,服务器将插入一个换行符,该换行符显然包含一些邮件应用程序无法读取的额外内容 修复方法是自己手动执行换行操作,这样我就可以控制在base64字符串中实际插入的内容
最后,带换行符的base64字符串在我测试的电子邮件客户端上被正确解码。感谢@Bill Shannon不太可能进入这一领域。感谢您提到换行,尽管您的回答完全无关。我又看了一眼断线,我得到了一个灯泡的时刻,哈哈。