如何获取电子邮件所有附件的文件名?

问题描述 投票:5回答:2

我正在尝试使用java和imap获取电子邮件的所有附件的文件名。我的代码是:

MimeMessage msg = (MimeMessage) messages[i];
String fileName = msg.getFileName();
System.out.println("The file name of this attachment is " + fileName);

但是即使电子邮件包含附件,它也始终会打印为null。。我在SO上看到了不同的代码,但是没有用……并且我不知道附件超过一个时该怎么办。PS:我只想获取文件名,不想下载附件。

java imap attachment
2个回答
9
投票

首先,使用以下代码确定邮件是否可能包含附件:

// suppose 'message' is an object of type Message
String contentType = message.getContentType();

if (contentType.contains("multipart")) {
    // this message may contain attachment
}

然后,我们必须遍历多部分中的每个部分,以识别包含附件的部分,如下所示:

Multipart multiPart = (Multipart) message.getContent();

for (int i = 0; i < multiPart.getCount(); i++) {
    MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(i);
    if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
        // this part is attachment
        // code to save attachment...
    }
}

并且要保存文件,您可以这样做:

part.saveFile("D:/Attachment/" + part.getFileName());

Source


0
投票

apache commons mail有一种更简单的方法:

final MimeMessageParser mimeParser = new MimeMessageParser(mimeMessage).parse();
final List<DataSource> attachmentList = mimeParser.getAttachmentList();
for (DataSource dataSource: attachmentList) {
            final String fileName = dataSource.getName();
            System.out.println("filename: " + fileName);
}
© www.soinside.com 2019 - 2024. All rights reserved.