我有一个现有的代码,下载和处理正确的一些电子邮件。
简而言之,我的代码如下所示:
private void processMessage(final Message message) {
try {
final String contentType = message.getContentType();
if (contentType.contains("multipart")) {
final Multipart multiPart = (Multipart) message.getContent();
for (int i = 0; i < multiPart.getCount(); i++) {
final MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(i);
/**************************************************************
* HERE I CAN'T GET THE EML (and its attachments) FROM 'part' *
**************************************************************/
if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
processAttachment(part);
}
}
}
} [...cutted...]
}
private void processAttachment(final MimeBodyPart part) throws IOException, MessagingException {
final InputStream input = getReusableInputStream(part);
if (part.getFileName() != null && isXmlType(part.getContentType())) {
processXml(input);
}
}
我应该修改它,以便解析EML并递归地获取附件,但我忽略了全局。
更新:我修改了processAttachment
方法(但它仍然不起作用):
private void processAttachment(final Multipart multipart) {
try {
for (int i = 0; i < multipart.getCount(); i++) {
final BodyPart bodyPart = multipart.getBodyPart(i);
if (bodyPart.getContent() instanceof Multipart) {
// part-within-a-part, do some recursion...
extractAttachment((Multipart) bodyPart.getContent());
}
System.out.println("Filename: " + bodyPart.getFileName());
System.out.println("ct: " + bodyPart.getContentType());
final boolean isXml = bodyPart.getFileName() != null && isXmlType(bodyPart.getContentType());
if (isXml) {
final InputStream inputStream = getReusableInputStream(bodyPart);
processXMLAttachment(inputStream);
}
}
} [cutted]
}
Filename: null
ct: TEXT/PLAIN; charset=iso-8859-1
Filename: null
ct: TEXT/HTML; charset=iso-8859-1
Filename: daticert.xml
ct: APPLICATION/XML; name=daticert.xml
Filename: postacert.eml
ct: MESSAGE/RFC822; name=postacert.eml
Filename: smime.p7s
ct: APPLICATION/X-PKCS7-SIGNATURE; name=smime.p7s
Filename: postacert.eml
ct: MESSAGE/RFC822; name=postacert.eml
有什么需要帮忙的吗?
谢谢
我通过检查任何MimePart
的类来解决这个问题,我发现嵌套消息的类型是IMAPNestedMessage
,因此我递归地调用main方法processMessage
:
private void processAttachment(final Multipart multipart) {
try {
for (int i = 0; i < multipart.getCount(); i++) {
final BodyPart bodyPart = multipart.getBodyPart(i);
// BEGIN - Added this part
System.out.println("CLASS bodyPart: " + bodyPart.getContent().getClass());
if (bodyPart.getContent() instanceof IMAPNestedMessage) {
processMessage((IMAPNestedMessage) bodyPart.getContent());
} else {
// END - Added this part
if (bodyPart.getContent() instanceof Multipart) {
processAttachment((Multipart) bodyPart.getContent());
} else {
final boolean isXml = bodyPart.getFileName() != null && isXmlType(bodyPart.getContentType());
if (isXml) {
final InputStream inputStream = getReusableInputStream(bodyPart);
processXMLAttachment(inputStream);
}
}
}
}
} catch (final Exception e) {
sendMailService.sendMailForImportINPSFailed("metodo processAttachment()", e);
e.printStackTrace();
}
}
现在工作得很好。
我试图通过检查元数据对象中的Content-Type键来访问不知何故提到的filename属性,但它不在那里。(我假设Tika评估内容类型的关键字不只是通过查看适当的标题,因此缺少所需的文件名) 因此,我的问题是(因为我无法弄清楚)是否有一种方法可以修改Tika源代码,以强制从内容类型头中提取文件名,当内容处置头中缺少适当的文件名属性时?
我正试图从戈朗的一封邮件中得到一个附件。问题是从Gmail读取的base64有效负载给了我错误
我尝试使用uploadAttachemnt方法上传zip文件,得到了一个secureHash作为输出。我试图下载相同的附件,使用hash作为openAttachmnet方法的输入,得到了一个InputStream。当我试图使用BuffeReader读取inputStream的内容时,它被加密了。我意识到我必须解压缩文件并读取它,所以我得到了这个包“import java.util.zip.ZipE
实际上,我希望将文件更改为base64,并附加弹性搜索JSON数据。 下面给出了代码: 当我执行这些查询时,特别是在发布数据时,我会得到以下错误: 这类问题有什么解决办法吗?我试图在附加文件时将数据更改为base64。 帮助?? 甚至,当我给出双引号并执行时: 我得到这个错误 我是不是漏掉了什么?
问题内容: 我有一个电子邮件多部分邮件对象,我想将该电子邮件中的附件转换为python文件对象。这可能吗?如果有可能,我应该考虑使用Python中的哪种方法或类来执行此类任务? 问题答案: 我不太了解“电子邮件多部分邮件对象”的意思。您的意思是属于该类的对象吗? 如果这就是您的意思,那很简单。在多部分消息上,该方法返回消息部分的列表(每个消息部分本身都是对象)。您可以遍历这些部分并检查它们的属性:
我正在尝试检索与一个帖子相关联的所有图像。我能够返回ID并打印该ID,但当我尝试将其与get_posts()的参数一起添加时,它返回一个空数组。如果我不包含post_parent,它会给我媒体库中的所有图像,而不是我正在循环的文章的所有图像。我是不是在正确的水平上循环? 我尝试手动添加ID,但它仍然返回一个空数组。 我在等这篇文章的附件清单。我想从附件中获取一个图像并将其打印到页面。但我总是得到空