gpt4 book ai didi

java - S/Mime 附件 java

转载 作者:太空宇宙 更新时间:2023-11-04 10:09:04 25 4
gpt4 key购买 nike

我尝试使用 S/Mime 协议(protocol)签署电子邮件。它与 body 配合良好。但是,当我加入电子邮件附件时,数字签名会使电子邮件名称(和扩展名)为空。因此,收到的电子邮件带有附件“whitoutTitle.dat”,而不是“name.pdf”。我使用 BCMail 的 SMIMESignedGenerator。附件未修改。这就是我感到困扰的原因。

// This attachment part loose the name after the digital signature
File partFile = new File(fileName);
DataSource fds = new FileDataSource(partFile);
attachmentPart1.setDataHandler(new DataHandler(fds));
attachmentPart1.setFileName(partFile.getName());

// This attachment don't loose its name after the signature
attachmentPart2.setText(strinbBuilder.toString());
attachmentPart2.setFileName("name.txt");

multipart.addBodyPart(attachmentPart1);
multipart.addBodyPart(attachmentPart2);

mimemsg.setContent(multipart);

MimeBodyPart mimeBodyPart = mimemsg.getContent();

SMIMESignedGenerator generator = new SMIMESignedGenerator();
generator.addCertificates(getCertificateStore(smimeKey));
generator.addSignerInfoGenerator(getInfoGenerator(smimeKey));
MimeMultipart signedMimeMultipart = generator.generate(mimeBodyPart);
MimeBodyPart signedMimeBodyPart = new MimeBodyPart();
signedMimeBodyPart.setContent(signedMimeMultipart);

有人遇到同样的问题吗?

感谢您的帮助。

最佳答案

我发现了一个我不太明白的解释。事实上,文件名是“正常”发送的,但采用了 header 中的格式

Content-Disposition : attachment; filename*=Cp1252''newName.pdf . 

如果我不设置文件名,我有:

Content-Disposition : attachment; filename=oldName.pdf  

(我需要修改名称,因此我使用了文件名 setter )。我无法解释原因,但“*=Cp1252''”部分是附件中缺少姓名的原因,但只有在邮件签名之后才发生(如果没有,我就有了好名字)。所以我的解决方案是直接修改名称:

attachmentPart.setHeader("Content-Disposition", "newName.pdf") 

并且它有效!它并不优雅,但它是一个解决方案。

关于java - S/Mime 附件 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52556359/

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