Как отправить два вложения, которые возвращаются функцией по одной почте, используя java mail? - PullRequest
0 голосов
/ 13 февраля 2020

Я получаю файл Excel как возвращаемое значение из метода. Я хочу отправить этот файл Excel как вложение в письме, но у меня нет возможности сохранить файл в системе. Практически, у меня нет имени файла. Как я могу отправить этот файл как вложение, используя javamail?

digitalDeliveryReportSheet = digitalWorkbook.createSheet("Local Media");
                headerStyle = digitalWorkbook.createCellStyle();
                headerFont = digitalWorkbook.createFont();
                headerFont.setBold(true);
                headerStyle.setFont(headerFont);

                cell = null;
                XSSFRow rowLm;

                rowNum = 1;
                colNum = 0;

                mergeRowFrom = 0; // --> added
                mergeRowTo = 0; // --> added

                mergeColFrom = 1; // --> added
                mergeColTo = 2; // --> added

                contentStatus = new ArrayList<String>();
                contentStatus.add("Delivered");
                contentStatus.add("Completed");

                rowLm = digitalDeliveryReportSheet.createRow(0);
                rowLm.createCell(colNum++).setCellValue("Delivery Date");
                colNum = 1;

                width = 3000;

                try {
                    width = Integer.parseInt(ApplicationUtil.getProperty(ApplicationConstants.REPORTS_DEFAULT_COLUMN_WIDTH));
                } catch (Exception e) {
                    LOG.warn("Exception while fetching REPORTS_DEFAULT_COLUMN_WIDTH", e);
                }


                for (String header : shelfCodeList) {
                    cell = rowLm.createCell(colNum++);
                    cell.setCellStyle(headerStyle);
                    cell.setCellValue(header);
                    CellRangeAddress cellRangeAddress = new CellRangeAddress(mergeRowFrom, mergeRowTo, mergeColFrom, mergeColTo); // --> added
                    digitalDeliveryReportSheet.addMergedRegion(cellRangeAddress); // --> added
                    mergeColFrom+=2;
                    mergeColTo+=2;
                    colNum++;
                    //sheet.autoSizeColumn(colNum);
                    digitalDeliveryReportSheet.setColumnWidth(colNum, width);
                }

                cellsToCover = shelfCodeList.size()*2;
                rowLm = digitalDeliveryReportSheet.createRow(1);
                colNum = 1;
                rowLm = digitalDeliveryReportSheet.createRow(rowNum);
                for(int i = 1; i <= cellsToCover; i++) {
                    cell = rowLm.createCell(colNum++);
                    cell.setCellStyle(headerStyle);
                    if(i % 2 != 0) {
                        cell.setCellValue(contentStatus.get(0));
                    }
                    else {
                        cell.setCellValue(contentStatus.get(1));
                    }
                }

                countByShelf = new HashMap<Long, Integer>();
                completedCountByShelf = new HashMap<Long, Integer>();
                rowNum++;
                    for (String date : deliveryDateList) {
                        colNum = 0;
                        rowLm = digitalDeliveryReportSheet.createRow(rowNum++);
                        cell = rowLm.createCell(colNum++);
                        cell.setCellValue(date);

                        for (int i=0; i < shelfNumberList.size(); i++) {
                            cell = rowLm.createCell(colNum++);
                            long shelfNumber = shelfNumberList.get(i);
                            countByShelf = map.get(date);
                            completedCountByShelf = byShelf.get(date);

                            if(countByShelf != null) {
                                if(countByShelf.get(shelfNumber) != null) {
                                    cell.setCellValue(countByShelf.get(shelfNumber));
                                }
                            }
                            if(completedCountByShelf!=null) {
                                if(completedCountByShelf.get(shelfNumber) != null) {
                                    cell = rowLm.createCell(colNum);
                                    cell.setCellValue(completedCountByShelf.get(shelfNumber));
                                }
                            }
                            colNum++;
                        }
                    }

                    mergeRowFrom = rowNum; // --> added
                    mergeRowTo = rowNum; // --> added

                    mergeColFrom = 1; // --> added
                    mergeColTo = 2; // --> added
                    rowLm = digitalDeliveryReportSheet.createRow(rowNum);
                    colNum = 1;
                    for (String header : shelfCodeList) {
                        cell = rowLm.createCell(colNum++);
                        cell.setCellStyle(headerStyle);
                        cell.setCellValue(header);
                        CellRangeAddress cellRangeAddress = new CellRangeAddress(mergeRowFrom, mergeRowTo, mergeColFrom, mergeColTo); // --> added
                        digitalDeliveryReportSheet.addMergedRegion(cellRangeAddress); // --> added
                        mergeColFrom+=2;
                        mergeColTo+=2;
                        colNum++;
                        //sheet.autoSizeColumn(colNum);
                        digitalDeliveryReportSheet.setColumnWidth(colNum, width);
                    }

                    rowNum++;
                    colNum = 1;
                    rowLm = digitalDeliveryReportSheet.createRow(rowNum);
                    for(int i = 1; i <= cellsToCover; i++) {
                        cell = rowLm.createCell(colNum++);
                        cell.setCellStyle(headerStyle);
                        if(i % 2 != 0) {
                            cell.setCellValue(contentStatus.get(0));
                        }
                        else {
                            cell.setCellValue(contentStatus.get(1));
                        }
                    }

                    rowNum++;
                    colNum = 0;
                    rowLm = digitalDeliveryReportSheet.createRow(rowNum++);
                    cell = rowLm.createCell(colNum++);
                    cell.setCellValue("Total By Column");
                    for (long shelfNumber : shelfNumberList) {
                        cell = rowLm.createCell(colNum++);
                        if (totalByColumn.get(shelfNumber) != null && totalByColumn.get(shelfNumber) > 0) {
                            cell.setCellValue(totalByColumn.get(shelfNumber));
                        }
                        if(totalCompletedByColumn.get(shelfNumber) != null && totalCompletedByColumn.get(shelfNumber) > 0) {
                            cell = rowLm.createCell(colNum);
                            cell.setCellValue(totalCompletedByColumn.get(shelfNumber));
                        }
                        colNum++;
                    }

    } else {
        throw new AssetLibraryValidationException(errorMessages);
    }

    return digitalWorkbook;

Это код, который возвращает книгу, как мне отправить эту возвращенную книгу без сохранения в моей системе.

1 Ответ

0 голосов
/ 13 февраля 2020

Вам необходимо преобразовать данные в некоторый экспортируемый формат, например, в формат файла Excel, в формат csv и т. Д. c. И вам нужно преобразовать данные в байтовый массив в памяти. Когда у вас есть данные в правильном формате в байтовом массиве, вы можете присоединить их к сообщению JavaMail, используя ByteArrayDataSource. Немного поиска должно привести к некоторым примерам, но ключевая строка такова:

mbp.setDataHandler(new DataHandler(
    new ByteArrayDataSource(my_byte_array, "text/csv"))); // or whatever MIME type
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...