【问题标题】:Java mail PDF attachment not workingJava 邮件 PDF 附件不起作用
【发布时间】:2013-02-04 07:59:10
【问题描述】:

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

我还观察到邮件下载中的内容与 PDF 生成中的内容相同。但是浏览器下载的就不一样了。

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

%PDF-1.4
%âãÏÓ
4 0 obj <</Type/XObject/ColorSpace/DeviceRGB/Subtype/Image/BitsPerComponent 8/Width 193/Length 11222/Height 58/Filter/DCTDecode>>stream
ÿØÿà  

我在邮件下载中得到的摘录如下

%PDF-1.4
%????
4 0 obj <</Type/XObject/ColorSpace/DeviceRGB/Subtype/Image/BitsPerComponent 8/Width 193/Length 11222/Height 58/Filter/DCTDecode>>stream
????

我正在使用 Spring MimeMessageHelper 发送消息。我正在使用以下方法添加附件

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);

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

【问题讨论】:

    标签: java pdf encoding jakarta-mail email-attachments


    【解决方案1】:

    我不确定这是否与它有关,但我注意到您没有在pdfBodyPart.addHeader("Content-Type", "application/pdf;charset"); 中设置实际字符集,也没有使用字符集作为参数调用attachmentContent.getBytes()。它怎么知道你想用哪一个?

    【讨论】:

    • 抱歉粘贴中的一些错误。已更正。
    • 仍然没有得到带有编码的内容字节。
    • 对不起,我没有得到你。您的意思是邮件附件的编码与 UTF-8 不同吗?
    • 我是说你应该调用 attachmentContent.getBytes("UTF-8");
    【解决方案2】:

    您收到的邮件中的附件使用了什么 Content-Transfer-Encoding?通常 JavaMail 会选择一个合适的值,但是如果文档包含纯文本和二进制的异常混合,就像您的文档看起来那样,JavaMail 可能不会选择最佳编码。您可以尝试添加 pdfBodyPart.setHeader("Content-Transfer-Encoding", "base64");

    【讨论】:

      【解决方案3】:

      我发现了它为什么不起作用。这是一个编码问题,但与 MimeMessageHelper 无关。问题是我将 PDF 生成为 OutputStream 并将其转换为字符串,然后将其转换为字节数组。当我将其转换为 String 时,编码发生了变化,从而导致了问题。所以我通过从 outputStream 获取字节数组来修复它:)

      【讨论】:

        猜你喜欢
        • 2015-10-28
        • 1970-01-01
        • 1970-01-01
        • 2014-02-28
        • 1970-01-01
        • 1970-01-01
        • 2021-05-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多