java中电子邮件的附件ID

时间:2013-06-19 05:27:42

标签: java api email attachment

我目前正在使用java mail api。我需要列出附件详细信息,还要删除某些电子邮件中的附件并将其转发给其他人。所以我想找出附件ID。我该怎么做?任何建议都将不胜感激!!!

3 个答案:

答案 0 :(得分:0)

这有帮助吗?

private void getAttachments(Part p, File inputFolder, List<String> fileNames) throws Exception{
    String disp = p.getDisposition();
    if (!p.isMimeType("multipart/*") ) {
        if (disp == null || (disp != null && (disp.equalsIgnoreCase(Part.ATTACHMENT) || disp.equalsIgnoreCase(Part.INLINE)))) {             
            String fileName = p.getFileName();
            File opFile =  new File(inputFolder, fileName);
            ((MimeBodyPart) p).saveFile(opFile);
            fileNames.add(fileName);                    
            }
        }
    }else{
        Multipart mp = (Multipart) p.getContent();
        int count = mp.getCount();
        for (int i = 0; i < count; i++){                 
            getAttachments(mp.getBodyPart(i),inputFolder, fileNames);
        }
    }
}

答案 1 :(得分:0)

没有任何附件ID 。您的邮件客户端显示为带有附加内容的邮件,实际上是MIME Multipart,看起来像这样(sample source):

From: John Doe <example@example.com>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="XXXXboundary text"

This is a multipart message in MIME format.

--XXXXboundary text 
Content-Type: text/plain

this is the body text

--XXXXboundary text 
Content-Type: text/plain;
Content-Disposition: attachment; filename="test.txt"

this is the attachment text

--XXXXboundary text--

需要注意的重要事项:

  1. 多部分中的每个部分都有Content-Type
  2. 可选地,可以有Content-Disposition header
  3. 单个部件本身可以是多部件
  4. 请注意,确实存在Content-ID标头,但我认为这不是您要查找的内容:例如,它在multipart/related消息中用于嵌入image/* s和同一电子邮件中text/html的文本。您必须了解它是如何工作的以及它是否在您的输入中使用。

    我认为您最好的选择是检查Content-DispositionContent-Type标题。剩下的就是猜测,如果没有实际要求,就无法帮助代码。

答案 2 :(得分:0)

尝试使用具有I'm using Avada theme. I'm using Visual Composer I'm using Directories Pro plugin for this page. 类的Apache Commons Email package。使用解析器,您可以像这样从电子邮件中获取内容ID(可用于标识附件)和附件:

MimeMessageParser

为了简洁起见,我在这里创建了一个列表,但是,您可以创建一个以Session session = Session.getInstance(new Properties()); ByteArrayInputStream is = new ByteArrayInputStream(rawEmail.getBytes()); MimeMessage message = new MimeMessage(session, is); MimeMessageParser parser = new MimeMessageParser(message); // Once you have the parser, get the content ids and attachments: List<DataSource> attachments = parser.getContentIds.stream .map(id -> parser.findAttachmentByCid(id)) .filter(att -> att != null) .collect(Collectors.toList()); 作为键,以contentId作为值的地图。

看看更多在Java here中使用解析器的示例,或者我为scala项目here编写的一些代码。