Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Mail更大的base64映像在Linux中有新行,导致它们在Apple';s Mail.app_Java_Image_Email_Base64_Jakarta Mail - Fatal编程技术网

Java Mail更大的base64映像在Linux中有新行,导致它们在Apple';s Mail.app

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

我正在使用base64创建一封包含嵌入式二维码的电子邮件。该二维码的一个特点是在码的中心覆盖一个小徽标。以下是两张生成的图像:

带有徽标的图像约为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");
//我首先将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不太可能进入这一领域。

感谢您提到换行,尽管您的回答完全无关。我又看了一眼断线,我得到了一个灯泡的时刻,哈哈。