gpt4 book ai didi

java - 保存电子邮件附件

转载 作者:行者123 更新时间:2023-12-02 00:31:29 24 4
gpt4 key购买 nike

有人可以建议我如何使用 Java 保存电子邮件附件吗?它是加密文件(PGP)。我需要保存它并用于解密。我使用这段代码:

String host = "mail.foxbox.lt";
String user = "user";
String password = "pass";
Properties properties = System.getProperties();

Session session = Session.getDefaultInstance(properties);
Store store = session.getStore("pop3");
store.connect(host, user, password);
Folder folder = store.getFolder("inbox");
folder.open(Folder.READ_WRITE);

Message[] message = folder.getMessages();
for (int a = message.length-1; a < message.length; a++) {
Multipart multipart = (Multipart) message[a].getContent();
for (int i = 0; i < multipart.getCount(); i++) {
BodyPart bodyPart = multipart.getBodyPart(i);
InputStream stream = bodyPart.getInputStream();
if (Part.ATTACHMENT.equals(bodyPart.getDisposition())) {
BufferedReader br = new BufferedReader(new InputStreamReader(stream));
FileWriter fstream = new FileWriter("AAA001.txt.pgp");
BufferedWriter out = new BufferedWriter(fstream);

int y;
while ((y = stream.read()) != -1) {
out.write(y);
}
stream.close();
out.close();
}
}
System.out.println();
}
folder.close(true);
store.close();

但它仅适用于文本文件(字符串)。就我而言,它更改了 .pgp 文件并给了我解密错误。如何在没有任何流的情况下保存文件?谢谢。

最佳答案

问题是您使用了 BufferedReaderBufferedWriter。这些旨在与字符​​流一起使用。它将使用默认平台编码将从附件中读取的字节序列转换为 Unicode 字符代码点(char 类型),反之亦然。在编码或解码过程中,不可映射的字符可能会被替换或从流中遗漏。

您必须使用普通的InputStream来读取附件,并使用FileOutputStream来写入文件:

InputStream stream = bodyPart.getInputStream();
if (Part.ATTACHMENT.equals(bodyPart.getDisposition())) {
FileOutputStream fstream = new FileOutputStream("AAA001.txt.pgp");

byte[] buffer = new byte[1024];
int len;
while ((len = stream.read(buffer)) != -1) {
fstream.write(buffer, 0, len);
}

fstream.close();
}
stream.close();

还有其他方法可以将 InputStream 的内容复制到 OutputStream,请参阅 this question and the answers .

关于java - 保存电子邮件附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8968904/

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