这是我将文件附加到邮件的代码:
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");
应该解决问题,但这对我不起作用
关于什么可能出错的任何想法?
由于
答案 0 :(得分:1)
进行一些调试的时间......
首先,删除所有setHeader调用;其中一些是错的,没有一个是必要的。
接下来,确定问题是在发送端还是在接收端。尝试多个邮件阅读器,看看它们是否都有附件问题。
尝试发送纯文本附件。他们也被腐化了吗?
发布protocol trace,显示当您发送简单附件失败的简单消息时会发生什么,因此我们可以看到消息是否正确构建。
您使用的是什么版本的JavaMail?
您使用哪种邮件阅读器查看附件?