2012-04-05 3 views
0

私はテストのためにディレクトリ "bar"に2つのファイルを持っています。下のコードから、そのディレクトリにあるすべてのファイルを電子メールの添付ファイルとして送信すると仮定します。問題は、私がそれらを送信すると、私は電子メールに1つのファイルの重複を取得することです。私はテストのために以前は一度正しく動作していましたが、私が何を変更したかも覚えていません。1つのファイルの複製を電子メールで送信するのはなぜですか?

私のコードに何が間違っているのか、ディレクトリ内のすべてのファイルを送信するのではなく、なぜ私の電子メールに複数のファイルがあるのでしょうか?ここで

は私のコードです:

 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

あなたはoff-by-oneエラーを持っている:あなたは、あなたはまた、ループになりたいのいずれか

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

または

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

2行があります。

multipart.addBodyPart(messageBodyPart); 

これは、最初のファイルを2回含むボディーパートを持っている理由です。

+0

それを捕まえていない、ありがとう。しかし、負のものと重複を取り除いた後、最後のファイルを2回表示します...アイデアはありますか?何か光を当てるために見なければならないものは何ですか? – SpicyWeenie

+0

ループ内に新しいmessageBodyPartインスタンスを作成しないことに注意して、今削除されたコメントがもう1つありました。あなたは、すべてのファイルに対して同じmessageBodyPartを再利用しているようです。つまり、ループの最初の反復で、そのmessageBodyPartの内容をfile1に設定し、次に2回目の反復で内容をfile2に設定します。これはマルチパートに2回追加されるため、最後のファイルが2回あります。ファイルが10個ある場合、10番目のファイルは10回になります。 – Confusion

+0

ちょうど目が覚めた。私はmultipart.addBodyPart(messageBodyPart)を移動しました。ループの外側にあります。今度は私の電子メールに最後に送られたファイルを一度入手します。 – SpicyWeenie

関連する問題