2016-09-21 8 views
1

javaからメールを送信しています。問題は、私がforループからプログラムを実行したときに私のメールのデータの最後のレコードしか得られないということです。しかし、私はコンソール上のデータを印刷するとき、私はすべてのレコードを期待どおりに取得します。Javaでforループの結果を1つだけ表示する

for(int i = 0; i < stud.size(); i++) { 

     Student students = studs.get(i); 

     msg.setContent("<table border = '1'><tr>" 
       + "<th>Students</th><th>Project</th></tr>" 
       + "<tr> <td> " 
       + students.getFullname() + "</td>" 
       + "<td> " + students.getProject() + "</td>" 
       + "</tr></table>", "text/html"); // this sends only the last record on mail. 

     System.out.println(students.getFullname() + " " + students.getProject()); // this prints a list of records on console. 

    } 

    Transport.send(msg); 
+0

send()をループに移動すると、複数のメールが送信されます。正しくありません。 – don234

+0

かなりシンプルです。 あなたが探しているデータは、StringBuilderに追加してください(文字列の値を確認できます)。その後、ループをコンテンツ本文に設定して送信してください:) 問題が解決したら解決してください。 – freesoul

答えて

1

Transport.send(msg);これをforループ内にも入れます。これと同様に、

private String myBody = ""; 
    for(int i = 0; i < stud.size(); i++) { 

     Student students = studs.get(i); 

     myBody += "<table border = '1'><tr>" 
       + "<th>Students</th><th>Project</th></tr>" 
       + "<tr> <td> " 
       + students.getFullname() + "</td>" 
       + "<td> " + students.getProject() + "</td>" 
       + "</tr></table>", "text/html"); // this sends only the last record on mail. 

     System.out.println(students.getFullname() + " " + students.getProject()); // this prints a list of records on console. 

    } 

    msg.setContent(myBody); 
    Transport.send(msg); 
+1

またはループを使ってコンテンツを連結し、ループの後にセット/送信すれば、同じ人に数百のメールを送信することはなく、すべてのデータを含むメールを送信することができます – BackSlash

+0

別のメールを別の人に送信したいでしょうか?学生一人一人のメールと同じように? –

+1

メールの受信者がループ内で変更されないのはなぜですか? – BackSlash

1

ないmsgのタイプだが、msg.setContentはおそらくあなたがそれに設定値を上書きするものを確認してください。

あなたが何かしようと、単一の電子メールを送りたいと仮定:

msg.setContent(msg.getContent() + "<table border = '1'><tr>" 
      + "<th>Students</th><th>Project</th></tr>" 
      + "<tr> <td> " 
      + students.getFullname() + "</td>" 
      + "<td> " + students.getProject() + "</td>" 
      + "</tr></table>", "text/html"); 

代わりに、あなたの代わりにsetContent()を使用することができますaddContent()appendContent()方法があるかもしれません。

1

コードを見てください。メールの内容を設定する生徒のリストを毎回同じメッセージに繰り返します。

次に、ループの後に、この時点で最後のメッセージのみが含まれているというメッセージを送信します。

複数のメッセージを送信する場合は、Transport.send(msg)をループに移動します。

+0

いいえ、私は、テーブルが生徒のリストに入力されている唯一のメールを送信したいと思います。 – don234

+0

したがって、文字列の連結またはStringBuilder.append()を使用して文字列を連結してから、1つのメール – AlexR

0

問題は、forループ内でmsg.setContent()を使用することです。 基本的には、毎回コンテンツをオーバーライドするだけです。最後の反復はメール内の実際の内容になります。 最初にコンテンツを構築するには、StringBuilderなどを使用することをお勧めします。これと同じように:あなたはすべての生徒の記録を持つ唯一の1通の電子メールをしたいと

StringBuilder content = new StringBuilder(); 
for(int i = 0; i < stud.size(); i++) 
{ 
    content.append("<table border = '1'><tr>"); 
    content.append("<th>Students</th><th>Project</th></tr>"); 
    content.append("<tr> <td> "); 
    content.append(students.getFullname() + "</td>"); 
    content.append("<td> " + students.getProject() + "</td>"); 
    content.append("</tr></table>"); 
} 
msg.setContent(content.toString(), "text/html"); 
0

、あなたは以下のように連結またはStringBuilderのことで、すべての文字列を作成する必要があります。

String headerStirng = "<table border = '1'><tr>" + "<th>Students</th><th>Project</th></tr>"; 

     StringBuilder bodyString = new StringBuilder(); 
     for (int i = 0; i < stud.size(); i++) { 

      Student students = studs.get(i); 

      bodyString.append("<tr> <td> " + students.getFullname() + "</td>" + "<td> " + students.getProject() + "</td></tr>"); 

      System.out.println(students.getFullname() + " " + students.getProject()); 

     } 

     String footerStirng = "</table>"; 
     msg.setContent(headerStirng + bodyString + footerStirng, "text/html"); 
     Transport.send(msg); 
0

ループを見ると、forループの各繰り返しで 'content'を上書きしています。 StringBuffer/StringBuilderを使用して、ループの各繰り返しでStringを連結し、最終的にコンテンツを設定する方がよい。

StringBuffer buf = new StringBuffer(); 
    buf.append("<table border = '1'>"); 
    for(int i = 0; i < stud.size(); i++) { 

     Student students = studs.get(i); 

     buf.append("<tr>" 
       + "<th>Students</th><th>Project</th></tr>" 
       + "<tr> <td> " 
       + students.getFullname() + "</td>" 
       + "<td> " + students.getProject() + "</td>" 
       + "</tr>"); 

     System.out.println(students.getFullname() + " " + students.getProject()); 

    } 
    buf.append("</table>"); 
    msg.setContent(buf.toString, "text/html"); 
    Transport.send(msg); 
関連する問題