如何在Java中通过电子邮件发送数据库中的数据(表格)?

huangapple go评论131阅读模式
英文:

How to send data(table) from database via email in java?

问题

I can send regular emails (not from the database), but how could I send a full table in an email? This is my code:

  1. private static Message preparedMessage(Session session, String myAccountEmail, String recipient) {
  2. try {
  3. Message message = new MimeMessage(session);
  4. message.setFrom(new InternetAddress(myAccountEmail));
  5. message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
  6. message.setSubject("Email using Java");
  7. String htmlTest = "<h2>i'm sending an email!</h2>";
  8. message.setContent(htmlTest, "text/html");
  9. return message;
  10. } catch (Exception ex) {
  11. Logger.getLogger(JavaMailUtil.class.getName()).log(Level.SEVERE, null, ex);
  12. }
  13. return null;
  14. }

I tried something simple like this:

  1. List<PetrolData> petrolList = MP_RacunDAO.select("03.08.2020", "11.08.2020"); // This is data that I want to put in a table
  2. for (PetrolData pd : petrolList) {
  3. String htmlTable = "<table border='1'>"
  4. + "<tr>"
  5. + "<th>Column 1</th>"
  6. + "<th>Column 2</th>"
  7. + "<th>Column 3</th>"
  8. + "</tr>"
  9. + "<tr>"
  10. + "<td>" + pd.getTitle() + "</td>"
  11. + "<td>" + pd.getSum1() + "</td>"
  12. + "<td>" + pd.getSum2() + "</td>"
  13. + "</tr>"
  14. + "</table>";
  15. }

Obviously, it is not working for me. What can I do?

英文:

I can send regular emails (not from database), but how could I send full table in an email?
This is my code:

  1. private static Message preparedMessage(Session session, String myAccountEmail,
  2. String recepient) {
  3. try {
  4. Message message = new MimeMessage(session);
  5. message.setFrom(new InternetAddress(myAccountEmail));
  6. message.setRecipient(Message.RecipientType.TO, new InternetAddress(recepient));
  7. message.setSubject(&quot;Email using Java&quot;);
  8. String htmlTest=&quot;&lt;h2&gt; i&#39;m sending an email!&lt;/h2&gt;&quot;;
  9. message.setContent(htmlTest, &quot;text/html&quot;);
  10. }
  11. return message;
  12. } catch (Exception ex) {
  13. Logger.getLogger(JavaMailUtil.class.getName()).log(Level.SEVERE, null, ex);
  14. }
  15. return null;
  16. }

I tried something simple like this:

  1. List &lt;PetrolData&gt; petrolList = MP_RacunDAO.select(&quot;03.08.2020&quot;, &quot;11.08.2020&quot;); //This is data that i want to put in table
  2. for(PetrolData pd : petrolList){
  3. String htmlTable = &quot;&lt;table border=&#39;1&#39;&gt; &lt;tr&gt; &quot;
  4. + &quot;&lt;th&gt;Column 1&lt;/td&gt;&quot;
  5. + &quot;&lt;th&gt;Column 2&lt;/td&gt;&quot;
  6. + &quot;&lt;th&gt;Column 3&lt;/td&gt;&quot;
  7. + &quot;&lt;/tr&gt;&quot;
  8. + &quot;&lt;tr&gt;&quot;
  9. + &quot;&lt;td&gt;&quot;+pd.getTitle()+&quot;&lt;/td&gt;&quot;
  10. + &quot;&lt;td&gt;&quot;+pd.getSum1()+&quot;&lt;/td&gt;&quot;
  11. + &quot;&lt;td&gt;&quot;+pd.getSum2()+&quot;&lt;/td&gt;&quot;
  12. + &quot;&lt;/tr&gt;&quot;
  13. + &quot;&lt;/table&gt;&quot;;
  14. }

Obviously, It is not working for me, what can I do?

答案1

得分: 0

如果您想在不使用任何外部库的情况下在一行中创建一个HTML表格,您可以使用StringBuilder来实现。

您基本上需要在循环遍历数据之前添加表格的开放标签和标题行,然后为每个PetrolData添加一行,并在循环之后添加表格的闭合标签。

看一下这个例子(其中使用了潜在的不必要的换行和制表符,但它们对于示例输出很有用,因为我不能在这里发送电子邮件):

  1. public static void main(String[] args) {
  2. // 示例数据
  3. List<PetrolData> petrolDataList = new ArrayList<>();
  4. petrolDataList.add(new PetrolData("Petrol 1", 4.1f, 8.2f, 12.4f));
  5. petrolDataList.add(new PetrolData("Petrol 2", 5.3f, 9.2f, 13.24f));
  6. petrolDataList.add(new PetrolData("Petrol 3", 6.0f, 10.1f, 14.312f));
  7. petrolDataList.add(new PetrolData("Petrol 4", 7.7f, 11.9f, 15.15f));
  8. petrolDataList.add(new PetrolData("Petrol 5", 8.45f, 12.0f, 16.936f));
  9. petrolDataList.add(new PetrolData("Petrol 6", 9.67f, 13.2f, 17.777f));
  10. StringBuilder htmlTableBuilder = new StringBuilder();
  11. // 打开表格
  12. htmlTableBuilder.append("<table border=\"1\">").append(System.lineSeparator());
  13. // 打开一行,这里是标题行
  14. htmlTableBuilder.append("\t").append("<tr>").append(System.lineSeparator());
  15. // 将标题添加到标题行
  16. htmlTableBuilder.append("\t").append("\t").append("<th>").append("Title").append("</th>").append(System.lineSeparator());
  17. htmlTableBuilder.append("\t").append("\t").append("<th>").append("Sum 1").append("</th>").append(System.lineSeparator());
  18. htmlTableBuilder.append("\t").append("\t").append("<th>").append("Sum 2").append("</th>").append(System.lineSeparator());
  19. htmlTableBuilder.append("\t").append("\t").append("<th>").append("Sum 3").append("</th>").append(System.lineSeparator());
  20. // 关闭标题行
  21. htmlTableBuilder.append("\t").append("</tr>").append(System.lineSeparator());
  22. // 为每个PetrolData添加一行数据
  23. for (PetrolData pd : petrolDataList) {
  24. // 再次打开一行
  25. htmlTableBuilder.append("\t").append("<tr>").append(System.lineSeparator());
  26. // 添加数据
  27. htmlTableBuilder.append("\t").append("\t").append("<td>").append(pd.getTitle()).append("</td>").append(System.lineSeparator());
  28. htmlTableBuilder.append("\t").append("\t").append("<td>").append(pd.getSum1()).append("</td>").append(System.lineSeparator());
  29. htmlTableBuilder.append("\t").append("\t").append("<td>").append(pd.getSum2()).append("</td>").append(System.lineSeparator());
  30. htmlTableBuilder.append("\t").append("\t").append("<td>").append(pd.getSum3()).append("</td>").append(System.lineSeparator());
  31. // 关闭行
  32. htmlTableBuilder.append("\t").append("</tr>").append(System.lineSeparator());
  33. }
  34. // 并关闭表格
  35. htmlTableBuilder.append("</table>");
  36. // 然后打印结果
  37. System.out.println(htmlTableBuilder.toString());
  38. }

这个示例的输出是以下内容,您可以轻松地嵌入到有效的HTML邮件中:

  1. <table border="1">
  2. <tr>
  3. <th>Title</th>
  4. <th>Sum 1</th>
  5. <th>Sum 2</th>
  6. <th>Sum 3</th>
  7. </tr>
  8. <tr>
  9. <td>Petrol 1</td>
  10. <td>4.099999904632568</td>
  11. <td>8.199999809265137</td>
  12. <td>12.399999618530273</td>
  13. </tr>
  14. <tr>
  15. <td>Petrol 2</td>
  16. <td>5.300000190734863</td>
  17. <td>9.199999809265137</td>
  18. <td>13.239999771118164</td>
  19. </tr>
  20. <tr>
  21. <td>Petrol 3</td>
  22. <td>6.0</td>
  23. <td>10.100000381469727</td>
  24. <td>14.312000274658203</td>
  25. </tr>
  26. <tr>
  27. <td>Petrol 4</td>
  28. <td>7.699999809265137</td>
  29. <td>11.899999618530273</td>
  30. <td>15.149999618530273</td>
  31. </tr>
  32. <tr>
  33. <td>Petrol 5</td>
  34. <td>8.449999809265137</td>
  35. <td>12.0</td>
  36. <td>16.93600082397461</td>
  37. </tr>
  38. <tr>
  39. <td>Petrol 6</td>
  40. <td>9.670000076293945</td>
  41. <td>13.199999809265137</td>
  42. <td>17.777000427246094</td>
  43. </tr>
  44. </table>

请注意,double的格式,您可能需要应用DecimalFormat或类似的内容来显示正确的值。

英文:

If you want to create an HMTL table in a row without using any external library, you can use a StringBuilder for that.

You would basically have to add the opening tag of the table and the header row before you loop through the data, then add a row for each PetrolData and after the loop you add the closing tag of the table.

See this example (which uses potentially unnecessary linebreaks and tabs, but they are useful for example output, because I won't send an email here):

  1. public static void main(String[] args) {
  2. // sample data
  3. List&lt;PetrolData&gt; petrolDataList = new ArrayList&lt;&gt;();
  4. petrolDataList.add(new PetrolData(&quot;Petrol 1&quot;, 4.1f, 8.2f, 12.4f));
  5. petrolDataList.add(new PetrolData(&quot;Petrol 2&quot;, 5.3f, 9.2f, 13.24f));
  6. petrolDataList.add(new PetrolData(&quot;Petrol 3&quot;, 6.0f, 10.1f, 14.312f));
  7. petrolDataList.add(new PetrolData(&quot;Petrol 4&quot;, 7.7f, 11.9f, 15.15f));
  8. petrolDataList.add(new PetrolData(&quot;Petrol 5&quot;, 8.45f, 12.0f, 16.936f));
  9. petrolDataList.add(new PetrolData(&quot;Petrol 6&quot;, 9.67f, 13.2f, 17.777f));
  10. StringBuilder htmlTableBuilder = new StringBuilder();
  11. // open the table
  12. htmlTableBuilder.append(&quot;&lt;table border=\&quot;1\&quot;&gt;&quot;).append(System.lineSeparator());
  13. // open a rown, header row here
  14. htmlTableBuilder.append(&quot;\t&quot;).append(&quot;&lt;tr&gt;&quot;).append(System.lineSeparator());
  15. // add the headers to the header row
  16. htmlTableBuilder.append(&quot;\t&quot;).append(&quot;\t&quot;).append(&quot;&lt;th&gt;&quot;).append(&quot;Title&quot;).append(&quot;&lt;/th&gt;&quot;).append(System.lineSeparator());
  17. htmlTableBuilder.append(&quot;\t&quot;).append(&quot;\t&quot;).append(&quot;&lt;th&gt;&quot;).append(&quot;Sum 1&quot;).append(&quot;&lt;/th&gt;&quot;).append(System.lineSeparator());
  18. htmlTableBuilder.append(&quot;\t&quot;).append(&quot;\t&quot;).append(&quot;&lt;th&gt;&quot;).append(&quot;Sum 2&quot;).append(&quot;&lt;/th&gt;&quot;).append(System.lineSeparator());
  19. htmlTableBuilder.append(&quot;\t&quot;).append(&quot;\t&quot;).append(&quot;&lt;th&gt;&quot;).append(&quot;Sum 3&quot;).append(&quot;&lt;/th&gt;&quot;).append(System.lineSeparator());
  20. // close the header row
  21. htmlTableBuilder.append(&quot;\t&quot;).append(&quot;&lt;/tr&gt;&quot;).append(System.lineSeparator());
  22. // add a data row for each PetrolData
  23. for (PetrolData pd : petrolDataList) {
  24. // open a row again
  25. htmlTableBuilder.append(&quot;\t&quot;).append(&quot;&lt;tr&gt;&quot;).append(System.lineSeparator());
  26. // add the data
  27. htmlTableBuilder.append(&quot;\t&quot;).append(&quot;\t&quot;).append(&quot;&lt;td&gt;&quot;).append(pd.getTitle()).append(&quot;&lt;/td&gt;&quot;).append(System.lineSeparator());
  28. htmlTableBuilder.append(&quot;\t&quot;).append(&quot;\t&quot;).append(&quot;&lt;td&gt;&quot;).append(pd.getSum1()).append(&quot;&lt;/td&gt;&quot;).append(System.lineSeparator());
  29. htmlTableBuilder.append(&quot;\t&quot;).append(&quot;\t&quot;).append(&quot;&lt;td&gt;&quot;).append(pd.getSum2()).append(&quot;&lt;/td&gt;&quot;).append(System.lineSeparator());
  30. htmlTableBuilder.append(&quot;\t&quot;).append(&quot;\t&quot;).append(&quot;&lt;td&gt;&quot;).append(pd.getSum3()).append(&quot;&lt;/td&gt;&quot;).append(System.lineSeparator());
  31. // close the row
  32. htmlTableBuilder.append(&quot;\t&quot;).append(&quot;&lt;/tr&gt;&quot;).append(System.lineSeparator());
  33. }
  34. // and close the table
  35. htmlTableBuilder.append(&quot;&lt;/table&gt;&quot;);
  36. // then print the result
  37. System.out.println(htmlTableBuilder.toString());
  38. }

The output of this is the following, which you could easily embed in a valid HTML mail:

  1. &lt;table border=&quot;1&quot;&gt;
  2. &lt;tr&gt;
  3. &lt;th&gt;Title&lt;/th&gt;
  4. &lt;th&gt;Sum 1&lt;/th&gt;
  5. &lt;th&gt;Sum 2&lt;/th&gt;
  6. &lt;th&gt;Sum 3&lt;/th&gt;
  7. &lt;/tr&gt;
  8. &lt;tr&gt;
  9. &lt;td&gt;Petrol 1&lt;/td&gt;
  10. &lt;td&gt;4.099999904632568&lt;/td&gt;
  11. &lt;td&gt;8.199999809265137&lt;/td&gt;
  12. &lt;td&gt;12.399999618530273&lt;/td&gt;
  13. &lt;/tr&gt;
  14. &lt;tr&gt;
  15. &lt;td&gt;Petrol 2&lt;/td&gt;
  16. &lt;td&gt;5.300000190734863&lt;/td&gt;
  17. &lt;td&gt;9.199999809265137&lt;/td&gt;
  18. &lt;td&gt;13.239999771118164&lt;/td&gt;
  19. &lt;/tr&gt;
  20. &lt;tr&gt;
  21. &lt;td&gt;Petrol 3&lt;/td&gt;
  22. &lt;td&gt;6.0&lt;/td&gt;
  23. &lt;td&gt;10.100000381469727&lt;/td&gt;
  24. &lt;td&gt;14.312000274658203&lt;/td&gt;
  25. &lt;/tr&gt;
  26. &lt;tr&gt;
  27. &lt;td&gt;Petrol 4&lt;/td&gt;
  28. &lt;td&gt;7.699999809265137&lt;/td&gt;
  29. &lt;td&gt;11.899999618530273&lt;/td&gt;
  30. &lt;td&gt;15.149999618530273&lt;/td&gt;
  31. &lt;/tr&gt;
  32. &lt;tr&gt;
  33. &lt;td&gt;Petrol 5&lt;/td&gt;
  34. &lt;td&gt;8.449999809265137&lt;/td&gt;
  35. &lt;td&gt;12.0&lt;/td&gt;
  36. &lt;td&gt;16.93600082397461&lt;/td&gt;
  37. &lt;/tr&gt;
  38. &lt;tr&gt;
  39. &lt;td&gt;Petrol 6&lt;/td&gt;
  40. &lt;td&gt;9.670000076293945&lt;/td&gt;
  41. &lt;td&gt;13.199999809265137&lt;/td&gt;
  42. &lt;td&gt;17.777000427246094&lt;/td&gt;
  43. &lt;/tr&gt;
  44. &lt;/table&gt;

Pay attention to the format of doubles, you might have to apply a DecimalFormat or anything similar for correct values to be shown.

huangapple
  • 本文由 发表于 2020年8月26日 15:12:47
  • 转载请务必保留本文链接:https://go.coder-hub.com/63592332.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定