我使用此代码读取经过认证的电子邮件中S / Mime格式的电子邮件字符串。这是一个片段
InputStream inputStreamObj = new ByteArrayInputStream(message.getBytes());
MimeMessage mimeMessageObj = new MimeMessage(session, inputStreamObj);
Object content = mimeMessageObj.getContent();
if (content instanceof Multipart) {
Multipart multiPart = (Multipart)content;
for (int i = 0; i < multiPart.getCount(); i++) {
BodyPart part = (MimeBodyPart) multiPart.getBodyPart(i);
if (part.getFileName() != null) {
System.out.println("Filename:"+part.getFileName());
} else if (part.getContent() instanceof Multipart) {
System.out.println("Multipart");
//here there is a recursive call to this method
} else if (part.getContent() instanceof String) {
System.out.println("Message text: "+part.getContent());
} else {
System.out.println("NOT RECOGNIZED TYPE");
}
}
}
我以这种方式看到:
Message text: <message in html form>
Message text: <message in txt form>
File: daticert.xml
File: postacert.eml
但是这里缺少“ smime.p7s”文件
如何找到这个?在“字符串”消息(消息)中,我看到了它:
Content-Type: application/x-pkcs7-signature; name="smime.p7s"
Content-Disposition: attachment; filename="smime.p7s"
文件在哪里?
也许我不能使用MimeMessage,而必须使用javax.mail.Message?以及如何转换Message中的文本?
答案 0 :(得分:1)
解决了! 收到的消息文本包含所有(标题+正文部分)。在管理时,它“松开”标题部分。现在将它们添加到第一个消息文本中,我可以看到所有附件,甚至是p7s文件。 实际上,此文件是使用代码绑定(打印您可以看到的txt)嵌套到主电子邮件中的,但是此链接缺少标题。以这种方式,没有标题,任何人都无法访问p7s文件。
解决方案是:在txt消息的开头添加标题为“名称:值\ n”形式的标头。