【问题标题】:java mail attachments getting corruptedjava邮件附件损坏
【发布时间】:2014-06-13 10:25:52
【问题描述】:

这是我将文件附加到邮件的代码:

Multipart mp=new MimeMultipart("mixed");
BodyPart mbody=new MimeBodyPart();
mbody.setHeader("Content-Type", "text/html; charset=us-ascii");
mbody.setHeader("Content-Transfer-Encoding","7bit");
mbody.setContent(content2, "text/html");                                                   
mp.addBodyPart(mbody);                                        
for(File file:f){    
   BodyPart mbody2=new MimeBodyPart();
   DataSource ds=new FileDataSource(file.getAbsolutePath());
   mbody2.setDataHandler(new DataHandler(ds));
   mbody2.setFileName(ds.getName());
   mbody2.setHeader("Content-Type", "multipart/mixed");
   mbody2.setHeader("Content-Transfer-Encoding", "base64");                        
   mp.addBodyPart(mbody2);                        
}
m.setContent(mp);

content2 是我在电子邮件中嵌入的 html 内容,我正在从数组列表 f 添加文件。

这里的问题是,虽然文件已附加并且我收到了电子邮件,但由于数据已损坏,我无法打开附件。我尝试附加的所有文件都会发生这种情况,例如 jpeg、pdf、电子表格、word 文档和 txt 文件。

我在这里读到:https://community.oracle.com/thread/1589120 这可能会发生,因为 JavaMail 使用的编码会混淆文件的二进制数据,添加 mbody2.setHeader("Content-Transfer-Encoding", "base64"); 应该可以解决问题,但这对我不起作用。

对可能出现的问题有任何想法吗?

谢谢

【问题讨论】:

    标签: jakarta-mail email-attachments corrupt-data


    【解决方案1】:

    是时候进行一些调试了...

    首先,移除所有的 setHeader 调用;其中一些是错误的,没有一个是必要的。

    接下来,判断问题出在发送端还是接收端。尝试多个邮件阅读器,看看他们是否都有附件问题。

    尝试发送纯文本附件。他们也被破坏了吗?

    发布protocol trace 显示当您发送带有简单附件的简单消息失败时会发生什么,以便我们查看消息的构造是否正确。

    您使用的是什么版本的 JavaMail?

    您使用什么邮件阅读器查看附件?

    【讨论】:

    • 取出标题就可以了。你能解释一下为什么或如何标题弄乱了电子邮件吗?谢谢。
    • 您覆盖了附件的 Content-Type,它应该适用于您附加的任何类型的文件,也就是说它是一个多部分的。肯定不是。它被包含在一个多部分中。其他的只是不必要的,因为 JavaMail 会(几乎总是)为您选择正确的内容类型和编码。
    猜你喜欢
    • 2014-08-02
    • 2014-05-09
    • 2017-08-13
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 2022-01-14
    • 2012-03-16
    • 2011-10-28
    相关资源
    最近更新 更多