java - S/Mime 附件 java

标签 java smime

我尝试使用 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/

相关文章:

amazon-web-services - AWS SES 是否支持使用 S/MIME 对电子邮件进行签名和加密

java - Jexl 做多到加倍

java - 如何扩展使用 FXML 的自定义 JavaFX 组件

java - 当方法明显存在时出现NoSuchMethodError

java - 来自 Java EE 应用程序服务器的数据流

iphone - 我可以确定 MFMailComposeViewController 是否使用 S/MIME 吗?

multipart - 我可以将 S/MIME 作为多部分/混合消息的一部分吗?

cryptography - bouncycaSTLe 中的 PKCS #7 SignedData 问题

openssl - 从不透明的 pkcs7 p7m 转换为分离的 smime

java - 设置 StaticClass 以将我当前的 Button 设置为 Visible with GUI Handler