我正在从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 :(得分: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 :(得分: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");
或者,您可以使用addContent()
或appendContent()
方法代替setContent()
。
答案 2 :(得分:1)
查看您的代码。您可以遍历每次将邮件内容设置为相同邮件的学生列表。
然后,在循环之后,您发送的消息此时仅包含最后一条消息。
如果要发送多条消息,请将Transport.send(msg)
移动到循环中。
答案 3 :(得分: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");
答案 4 :(得分: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);
答案 5 :(得分:0)
看看你的循环,你正在覆盖&#39;内容&#39;在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);