Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过电子邮件发送文件而不首先使用spring boot将其存储在存储器中?_Java_Spring Boot_Apache Poi - Fatal编程技术网

Java 如何通过电子邮件发送文件而不首先使用spring boot将其存储在存储器中?

Java 如何通过电子邮件发送文件而不首先使用spring boot将其存储在存储器中?,java,spring-boot,apache-poi,Java,Spring Boot,Apache Poi,我正在开发一个spring启动应用程序。在我的项目中,我正在创建一个.xlsx文件,然后我必须使用SpringBoot通过电子邮件发送 我可以使用ApachePOI创建该文件,但稍后要通过邮件将其作为附件发送,我应该将该文件保存在本地的某个位置,然后在将其作为附件发送时将其移回 我是否可以创建一个.xlsx文件并通过电子邮件直接发送,而不必先将其保存在某个地方? 对于邮件,我使用“org.springframework.boot:springbootstartermail” 对于.xlsx,我使

我正在开发一个spring启动应用程序。在我的项目中,我正在创建一个.xlsx文件,然后我必须使用SpringBoot通过电子邮件发送

我可以使用ApachePOI创建该文件,但稍后要通过邮件将其作为附件发送,我应该将该文件保存在本地的某个位置,然后在将其作为附件发送时将其移回

我是否可以创建一个.xlsx文件并通过电子邮件直接发送,而不必先将其保存在某个地方?

对于邮件,我使用“org.springframework.boot:springbootstartermail”

对于.xlsx,我使用的是'org.apache.poi',名称:'poi',版本:'4.1.2'和'org.apache.poi',名称:'poi ooxml',版本:'4.1.2'

源代码

       XSSFWorkbook workbook = new XSSFWorkbook();
       List<String> s = Arrays.asList("person","animal");
       CellStyle style = workbook.createCellStyle();
       style.setWrapText(true);
       int n = 1;
       String source = s.get(0);
       Sheet sheet = workbook.createSheet(source);
       for (String i : s) {
           if(!source.equalsIgnoreCase(i)) {
               sheet = workbook.createSheet(i);
               Row header = sheet.createRow(0);

               CellStyle headerStyle = workbook.createCellStyle();

               XSSFFont font = workbook.createFont();
               font.setFontName("Arial");
               font.setBold(true);
               headerStyle.setFont(font);

               Cell headerCell = header.createCell(0);
               headerCell.setCellValue("Name");
               headerCell.setCellStyle(headerStyle);

               headerCell = header.createCell(1);
               headerCell.setCellValue("Age");
               headerCell.setCellStyle(headerStyle);
               source = i;
           }

           Row row = sheet.createRow(n);
           Cell cell = row.createCell(0);
           cell.setCellValue("Udhav Mohata");
           cell.setCellStyle(style);

           cell = row.createCell(1);
           cell.setCellValue(22);
           cell.setCellStyle(style);
           n++;
       }

       FileOutputStream outputStream = new FileOutputStream(Path_to_the_file);
       workbook.write(outputStream);
       workbook.close();
       sendMail();
   }


public void sendMail() throws MessagingException, IOException {
       MimeMessage message = mailSender.createMimeMessage();
       MimeMessageHelper helper = new MimeMessageHelper(message, true);
       helper.setFrom("spidercodie@gmail.com");
       helper.setTo("udhavmohata1@gmail.com");
       helper.setSubject("Test Mail");
       helper.setText("Hello world");
       FileSystemResource file = new FileSystemResource(path_to_the_file));
       helper.addAttachment("Invoice.xlsx", file);
       mailSender.send(message);
   }
xssf工作簿=新的xssf工作簿();
列表s=Arrays.asList(“人”、“动物”);
CellStyle style=workbook.createCellStyle();
style.setWrapText(true);
int n=1;
字符串源=s.get(0);
工作表=工作簿.createSheet(源);
用于(字符串i:s){
if(!source.equalsIgnoreCase(i)){
工作表=工作簿。创建工作表(i);
行标题=sheet.createRow(0);
CellStyle headerStyle=工作簿.createCellStyle();
XSSFFont font=workbook.createFont();
font.setFontName(“Arial”);
font.setBold(true);
headerStyle.setFont(字体);
Cell headerCell=header.createCell(0);
headerCell.setCellValue(“名称”);
headerCell.setCellStyle(headerStyle);
headerCell=header.createCell(1);
headerCell.setCellValue(“年龄”);
headerCell.setCellStyle(headerStyle);
来源=i;
}
Row Row=sheet.createRow(n);
Cell Cell=row.createCell(0);
cell.setCellValue(“Udhav Mohata”);
cell.setCellStyle(style);
cell=row.createCell(1);
cell.setCellValue(22);
cell.setCellStyle(style);
n++;
}
FileOutputStream outputStream=新的FileOutputStream(指向\u文件的路径);
workbook.write(outputStream);
workbook.close();
sendMail();
}
public void sendMail()引发MessaginException,IOException{
MimeMessage message=mailssender.createMimeMessage();
mimessagehelper=新的mimessagehelper(消息,true);
helper.setFrom(“spidercodie@gmail.com");
helper.setTo(“udhavmohata1@gmail.com");
helper.setSubject(“测试邮件”);
helper.setText(“Hello world”);
FileSystemResource file=新的FileSystemResource(路径_到_文件));
addAttachment(“Invoice.xlsx”,文件);
发送(消息);
}

以下是我的建议,基于我提供的链接中的方法-这基本上就是加格拉瓦尔在评论中提到的

(使用gmail,这种方法对我来说很好。)

创建Excel文件

我用了你的代码,除了最后一部分。我没有将工作簿写入文件系统,而是通过
java.io.ByteArrayOutputStream
将其写入字节数组

ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
    workbook.write(bos);
} finally {
    bos.close();
}
byte[] excelFileAsBytes = bos.toByteArray();
使用我的字节数组作为附件

在我的电子邮件代码(与您的几乎相同,但我不想意外复制/粘贴您的电子邮件地址)中,我替换了以下几行:

FileSystemResource file = new FileSystemResource(path_to_the_file));
helper.addAttachment("Invoice.xlsx", file);

在这些行中,使用
org.springframework.core.io.ByteArrayResource

ByteArrayResource resource = new ByteArrayResource(excelFileAsBytes);
helper.addAttachment("Invoice.xlsx", resource);

这给了我一封包含Excel文件作为附件的电子邮件。

通过TearrayOutputStream写入
并将字节直接传递到电子邮件?@Gagravarr您能用简单的示例代码显示它吗?谢谢。
ByteArrayOutputStream=newbytearrayoutputstream();练习册。书写(BAS);字节[]数据=baos.toByteArray()
@Gagravarr我认为它不会起作用,因为如果不将字节保存在文件中的某个位置,就不可能将字节直接传递给邮件。这是否回答了你的问题。换句话说,您不仅限于使用
文件系统资源