gpt4 book ai didi

java - 受密码保护的 Excel 作为邮件附件

转载 作者:行者123 更新时间:2023-12-01 09:24:10 25 4
gpt4 key购买 nike

我创建了一个使用 java 发送邮件的 jar。我必须在邮件中附上 Excel 文件。我正在使用 HSSF 创建工作表。但我需要用密码加密附件。我成功了。但是,当我通过 Outlook 直接从邮件打开附件时,它不会询问密码。当我复制到任何文件夹然后尝试打开时,它可以正常工作。有人可以帮忙吗?

public static void main(final String... args) throws Exception {     

String fname = "D:\\Mail\\Sample.xls";

FileInputStream fileInput = null;
BufferedInputStream bufferInput = null;
POIFSFileSystem poiFileSystem = null;
FileOutputStream fileOut = null;

try {

fileInput = new FileInputStream(fname);
bufferInput = new BufferedInputStream(fileInput);
poiFileSystem = new POIFSFileSystem(bufferInput);

Biff8EncryptionKey.setCurrentUserPassword("secret");
HSSFWorkbook workbook = new HSSFWorkbook(poiFileSystem, true);
HSSFSheet sheet = workbook.getSheetAt(0);

HSSFRow row = sheet.createRow(0);
Cell cell = row.createCell(0);

cell.setCellValue("THIS WORKS!");

fileOut = new FileOutputStream(fname);
workbook.writeProtectWorkbook(Biff8EncryptionKey.getCurrentUserPassword(), "");
workbook.write(fileOut);

File file = new File("D:\\Mail\\Sample.xls");

FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
try {
for (int readNum; (readNum = fis.read(buf)) != -1;) {
bos.write(buf, 0, readNum);
System.out.println("read " + readNum + " bytes,");
}
} catch (IOException ex) {
}
byte[] bytes = bos.toByteArray();

// Code for sending mail

} catch (Exception ex) {

System.out.println(ex.getMessage());

} finally {

try {

bufferInput.close();

} catch (IOException ex) {

System.out.println(ex.getMessage());

}

try {

fileOut.close();

} catch (IOException ex) {

System.out.println(ex.getMessage());

}
}

}

最佳答案

方法HSSFWorkbook.writeProtectWorkbook(...)仅用于保护工作簿不被写入/修改。
如果您尝试以读+写模式(Windows 文件夹中的默认模式)打开它,它会要求您输入密码。
但是,如果您以只读模式打开它(这就是 Outlook 对附件的处理方式),您将可以查看内容,因为您无法覆盖它们,因此不需要写入密码。
这就是您可以在 Outlook 中查看(但不能编辑)它,但从文件夹中打开它时却不能的原因。

我不知道最新版本的 Apache POI 是否支持 HSSFWorkBook 的完整密码保护(Google 快速搜索表明不支持,但谁知道呢)。

如果没有,您可以通过制作一个包含 Excel 的受密码保护的 ZIP 文件并附加该 ZIP 文件来解决此问题。

关于java - 受密码保护的 Excel 作为邮件附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39971664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com