java邮件附件损坏

时间:2014-06-13 10:25:52

标签: javamail email-attachments corrupt-data

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

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内容,我正在添加arraylist f中的文件。

这里的问题是,虽然文件已附加并且我收到电子邮件,但我无法打开附件,因为数据已损坏。这种情况发生在我试图附加的所有文件中,如jpeg,pdf,电子表格,word文档和txt文件。

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

关于什么可能出错的任何想法?

由于

1 个答案:

答案 0 :(得分:1)

进行一些调试的时间......

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

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

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

发布protocol trace,显示当您发送简单附件失败的简单消息时会发生什么,因此我们可以看到消息是否正确构建。

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

您使用哪种邮件阅读器查看附件?