我在“bar”目录中有2个文件用于测试。从下面的代码中,假设将该目录中的所有文件作为电子邮件附件发送。问题是当我发送它们时,我会在电子邮件中找到一个文件的副本。我确实让它在测试之前正常工作,但我不记得我可能已经改变了什么。
有没有人认识到我的代码可能有什么问题,或者为什么我不是在目录中发送所有文件,而是在我的电子邮件中多次获得一个文件?
这是我的代码:
multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
File f = new File("C:\\foo\\bar");
File[] attachments = f.listFiles();
//email with attachments (if any)
for(int i = 0; i < f.listFiles().length - 1; i++){
DataSource fileDataSource = new FileDataSource(attachments[i]);
messageBodyPart.setDataHandler(new DataHandler(fileDataSource));
messageBodyPart.setFileName(attachments[i].getName());
multipart.addBodyPart(messageBodyPart);
}
message.setContent(multipart);
message.setSentDate(new Date());
Transport.send(message);
答案 0 :(得分:4)
您有一个错误:您希望循环为
for (int i = 0; i < f.listFiles().length; i++){
或
for (int i = 0; i <= f.listFiles().length -1; i++){
你还有两行说
multipart.addBodyPart(messageBodyPart);
这就是为什么你让bodypart包含第一个文件两次。