2012-04-05 57 views
0

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

回答

4

您有一個差一錯誤:你希望循環是要麼

for (int i = 0; i < f.listFiles().length; i++){ 

for (int i = 0; i <= f.listFiles().length -1; i++){ 

也有兩條線說

multipart.addBodyPart(messageBodyPart); 

這就是爲什麼你的bodypart包含第一個文件兩次。

+0

沒有明白,謝謝。但刪除負面和重複後,現在它顯示最後一個文件兩次...任何想法?任何需要看到的東西都能揭示一些光明? – SpicyWeenie 2012-04-05 11:44:51

+0

還有另一條評論,現在刪除,注意到你不在循環中創建新的messageBodyPart實例。您似乎對所有文件重複使用了相同的messageBodyPart,這意味着在循環的第一次迭代中,您現在將該messageBodyPart的內容設置爲file1,然後在第二次迭代中將內容設置爲file2。它被添加到多部分兩次,因此你有最後一個文件兩次。如果有10個文件,它將是第10個文件的10倍。 – Confusion 2012-04-05 12:26:07

+0

剛起牀。好的,我移動了multipart.addBodyPart(messageBodyPart);在循環之外。現在我只收到一次發送到我的電子郵件的最後一個文件。 – SpicyWeenie 2012-04-05 15:28:29

相關問題