如何使用java邮件发送函数在单个邮件中返回的两个附件?

uyhoqukh  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(427)

我从一个方法得到一个excel文件作为返回值。我想将excel文件作为附件发送到邮件中,但我没有在系统中保存该文件的选项。所以实际上,我没有文件名。如何使用javamail将该文件作为附件发送?

  1. digitalDeliveryReportSheet = digitalWorkbook.createSheet("Local Media");
  2. headerStyle = digitalWorkbook.createCellStyle();
  3. headerFont = digitalWorkbook.createFont();
  4. headerFont.setBold(true);
  5. headerStyle.setFont(headerFont);
  6. cell = null;
  7. XSSFRow rowLm;
  8. rowNum = 1;
  9. colNum = 0;
  10. mergeRowFrom = 0; // --> added
  11. mergeRowTo = 0; // --> added
  12. mergeColFrom = 1; // --> added
  13. mergeColTo = 2; // --> added
  14. contentStatus = new ArrayList<String>();
  15. contentStatus.add("Delivered");
  16. contentStatus.add("Completed");
  17. rowLm = digitalDeliveryReportSheet.createRow(0);
  18. rowLm.createCell(colNum++).setCellValue("Delivery Date");
  19. colNum = 1;
  20. width = 3000;
  21. try {
  22. width = Integer.parseInt(ApplicationUtil.getProperty(ApplicationConstants.REPORTS_DEFAULT_COLUMN_WIDTH));
  23. } catch (Exception e) {
  24. LOG.warn("Exception while fetching REPORTS_DEFAULT_COLUMN_WIDTH", e);
  25. }
  26. for (String header : shelfCodeList) {
  27. cell = rowLm.createCell(colNum++);
  28. cell.setCellStyle(headerStyle);
  29. cell.setCellValue(header);
  30. CellRangeAddress cellRangeAddress = new CellRangeAddress(mergeRowFrom, mergeRowTo, mergeColFrom, mergeColTo); // --> added
  31. digitalDeliveryReportSheet.addMergedRegion(cellRangeAddress); // --> added
  32. mergeColFrom+=2;
  33. mergeColTo+=2;
  34. colNum++;
  35. //sheet.autoSizeColumn(colNum);
  36. digitalDeliveryReportSheet.setColumnWidth(colNum, width);
  37. }
  38. cellsToCover = shelfCodeList.size()*2;
  39. rowLm = digitalDeliveryReportSheet.createRow(1);
  40. colNum = 1;
  41. rowLm = digitalDeliveryReportSheet.createRow(rowNum);
  42. for(int i = 1; i <= cellsToCover; i++) {
  43. cell = rowLm.createCell(colNum++);
  44. cell.setCellStyle(headerStyle);
  45. if(i % 2 != 0) {
  46. cell.setCellValue(contentStatus.get(0));
  47. }
  48. else {
  49. cell.setCellValue(contentStatus.get(1));
  50. }
  51. }
  52. countByShelf = new HashMap<Long, Integer>();
  53. completedCountByShelf = new HashMap<Long, Integer>();
  54. rowNum++;
  55. for (String date : deliveryDateList) {
  56. colNum = 0;
  57. rowLm = digitalDeliveryReportSheet.createRow(rowNum++);
  58. cell = rowLm.createCell(colNum++);
  59. cell.setCellValue(date);
  60. for (int i=0; i < shelfNumberList.size(); i++) {
  61. cell = rowLm.createCell(colNum++);
  62. long shelfNumber = shelfNumberList.get(i);
  63. countByShelf = map.get(date);
  64. completedCountByShelf = byShelf.get(date);
  65. if(countByShelf != null) {
  66. if(countByShelf.get(shelfNumber) != null) {
  67. cell.setCellValue(countByShelf.get(shelfNumber));
  68. }
  69. }
  70. if(completedCountByShelf!=null) {
  71. if(completedCountByShelf.get(shelfNumber) != null) {
  72. cell = rowLm.createCell(colNum);
  73. cell.setCellValue(completedCountByShelf.get(shelfNumber));
  74. }
  75. }
  76. colNum++;
  77. }
  78. }
  79. mergeRowFrom = rowNum; // --> added
  80. mergeRowTo = rowNum; // --> added
  81. mergeColFrom = 1; // --> added
  82. mergeColTo = 2; // --> added
  83. rowLm = digitalDeliveryReportSheet.createRow(rowNum);
  84. colNum = 1;
  85. for (String header : shelfCodeList) {
  86. cell = rowLm.createCell(colNum++);
  87. cell.setCellStyle(headerStyle);
  88. cell.setCellValue(header);
  89. CellRangeAddress cellRangeAddress = new CellRangeAddress(mergeRowFrom, mergeRowTo, mergeColFrom, mergeColTo); // --> added
  90. digitalDeliveryReportSheet.addMergedRegion(cellRangeAddress); // --> added
  91. mergeColFrom+=2;
  92. mergeColTo+=2;
  93. colNum++;
  94. //sheet.autoSizeColumn(colNum);
  95. digitalDeliveryReportSheet.setColumnWidth(colNum, width);
  96. }
  97. rowNum++;
  98. colNum = 1;
  99. rowLm = digitalDeliveryReportSheet.createRow(rowNum);
  100. for(int i = 1; i <= cellsToCover; i++) {
  101. cell = rowLm.createCell(colNum++);
  102. cell.setCellStyle(headerStyle);
  103. if(i % 2 != 0) {
  104. cell.setCellValue(contentStatus.get(0));
  105. }
  106. else {
  107. cell.setCellValue(contentStatus.get(1));
  108. }
  109. }
  110. rowNum++;
  111. colNum = 0;
  112. rowLm = digitalDeliveryReportSheet.createRow(rowNum++);
  113. cell = rowLm.createCell(colNum++);
  114. cell.setCellValue("Total By Column");
  115. for (long shelfNumber : shelfNumberList) {
  116. cell = rowLm.createCell(colNum++);
  117. if (totalByColumn.get(shelfNumber) != null && totalByColumn.get(shelfNumber) > 0) {
  118. cell.setCellValue(totalByColumn.get(shelfNumber));
  119. }
  120. if(totalCompletedByColumn.get(shelfNumber) != null && totalCompletedByColumn.get(shelfNumber) > 0) {
  121. cell = rowLm.createCell(colNum);
  122. cell.setCellValue(totalCompletedByColumn.get(shelfNumber));
  123. }
  124. colNum++;
  125. }
  126. } else {
  127. throw new AssetLibraryValidationException(errorMessages);
  128. }
  129. return digitalWorkbook;

这是返回工作簿的代码,如何发送返回的工作簿而不将其保存在系统中。

t3psigkw

t3psigkw1#

您需要将数据转换为某种可导出格式,例如excel文件格式、csv格式等,并且需要将数据转换为内存中的字节数组。一旦在字节数组中有了正确格式的数据,就可以使用bytearraydatasource将其附加到javamail消息。稍加搜索就会发现一些例子,但关键是:

  1. mbp.setDataHandler(new DataHandler(
  2. new ByteArrayDataSource(my_byte_array, "text/csv"))); // or whatever MIME type

相关问题