2016-09-21 3 views
1

java에서 메일을 보내고 있습니다. 문제는 for 루프에서 프로그램을 실행할 때 메일의 마지막 레코드 만 가져온다는 것입니다. 그러나 콘솔에 데이터를 인쇄 할 때 예상대로 모든 레코드를 가져옵니다.Java에서 for 루프에 하나의 결과 만 표시

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()를 사용하여 문자열을 연결 한 다음 메일 하나를 보냅니다. – AlexR

0

문제는 for 루프 내에서 msg.setContent()을 사용한다는 것입니다. 기본적으로 매번 내용을 무시합니다. 마지막 반복은 메일의 실제 내용이됩니다. 먼저 StringBuilder 또는 다른 것을 사용하여 콘텐트를 먼저 만들 수 있습니다. 좋아요 :

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

모든 학생 기록이있는 하나의 이메일 만 보내려면 아래처럼 연결 문자열 또는 문자열 작성자로 모든 문자열을 만들어야합니다.

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 루프의 각 반복에서 '내용'을 덮어 쓰게됩니다. 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);