Java mail PDF附件不工作

Java mail PDF附件不工作,java,pdf,encoding,jakarta-mail,email-attachments,Java,Pdf,Encoding,Jakarta Mail,Email Attachments,我正在生成一个PDF,并尝试将其附加到邮件中,以及使用java从浏览器下载。从浏览器下载很好,但附加到邮件是我面临的问题。档案附呈。文件的附件名称和大小保持不变。问题是当我打开邮件附件中的PDF时,它什么也没有显示。没有内容的正确页数。当我通过硬编码附加从浏览器下载的文件时,它工作正常。所以我想问题不在于PDF的生成。我尝试使用比较工具beyond compare打开这两个文件(一个从浏览器下载,另一个从邮件下载)。从mail下载的显示转换错误。当我用notepad++打开时,两者都显示不同的编

我正在生成一个PDF,并尝试将其附加到邮件中,以及使用java从浏览器下载。从浏览器下载很好,但附加到邮件是我面临的问题。档案附呈。文件的附件名称和大小保持不变。问题是当我打开邮件附件中的PDF时,它什么也没有显示。没有内容的正确页数。当我通过硬编码附加从浏览器下载的文件时,它工作正常。所以我想问题不在于PDF的生成。我尝试使用比较工具beyond compare打开这两个文件(一个从浏览器下载,另一个从邮件下载)。从mail下载的显示转换错误。当我用notepad++打开时,两者都显示不同的编码。我不太熟悉这些编码的东西。我想这与编码有关

我还注意到邮件下载中的内容与PDF生成时的内容相同。但是,在浏览器下载的那个是不同的

我从浏览器下载的内容摘录如下(内容太大,无法粘贴)

我也尝试过另一种连接方式,但没有成功

DataSource dataSource = new ByteArrayDataSource(bytes, "application/pdf");
MimeBodyPart pdfBodyPart = new MimeBodyPart();
pdfBodyPart.addHeader("Content-Type", "application/pdf;charset=UTF-8");
pdfBodyPart.addHeader("Content-disposition", "attachment; filename="+fileName);
pdfBodyPart.setDataHandler(new DataHandler(dataSource));
pdfBodyPart.setFileName(fileName);
mimeMessageHelper.getMimeMultipart().addBodyPart(pdfBodyPart);

任何帮助都将不胜感激。提前感谢

我不确定这是否与此有关,但我注意到您没有在
pdfBodyPart.addHeader(“内容类型”,“应用程序/pdf;字符集”)中设置实际字符集
,也不使用字符集作为参数调用
attachmentContent.getBytes()
。它如何知道您要使用哪一个?

您收到的邮件中的附件使用了什么内容传输编码?通常,JavaMail会选择一个合适的值,但如果文档包含一个不寻常的纯文本和二进制混合,正如您的文档所显示的那样,JavaMail可能不会选择最佳编码。您可以尝试添加pdfBodyPart.setHeader(“内容传输编码”、“base64”)

我找到了它不起作用的原因。这是一个编码问题,但与mimessagehelper无关。问题是我将PDF生成一个OutputStream并将其转换为字符串,然后将其转换为字节数组。当我将其转换为字符串时,编码发生了更改,导致了问题。所以我通过从outputStream获取字节数组来修复它:)

很抱歉粘贴中出现了一些错误。已更正。但仍然无法通过编码获取内容字节。很抱歉,我没有获取您的信息。你是说邮件附件的编码与UTF-8不同吗?我是说你可能应该调用attachmentContent.getBytes(“UTF-8”);
%PDF-1.4
%????
4 0 obj <</Type/XObject/ColorSpace/DeviceRGB/Subtype/Image/BitsPerComponent 8/Width 193/Length 11222/Height 58/Filter/DCTDecode>>stream
????
MimeMessageHelper.addAttachment(fileName, new ByteArrayResource(attachmentContent.getBytes()), "application/pdf");
DataSource dataSource = new ByteArrayDataSource(bytes, "application/pdf");
MimeBodyPart pdfBodyPart = new MimeBodyPart();
pdfBodyPart.addHeader("Content-Type", "application/pdf;charset=UTF-8");
pdfBodyPart.addHeader("Content-disposition", "attachment; filename="+fileName);
pdfBodyPart.setDataHandler(new DataHandler(dataSource));
pdfBodyPart.setFileName(fileName);
mimeMessageHelper.getMimeMultipart().addBodyPart(pdfBodyPart);