使用 Java 提取内联电子邮件附件

阿克谢·洛库尔

我正在使用以下Java代码尝试提取电子邮件附件:

private static List<File> extractAttachment(Message message) {
    List<File> attachments = new ArrayList<File>();
    try {
        Multipart multipart = (Multipart) message.getContent();

        for (int i = 0; i < multipart.getCount(); i++) {
        BodyPart bodyPart = multipart.getBodyPart(i);
        System.out.println("bodyPart.getDisposition(): " + bodyPart.getDisposition());
        if (!Part.ATTACHMENT.equalsIgnoreCase(bodyPart.getDisposition())) {
            continue; // dealing with attachments only
        }
        InputStream is = bodyPart.getInputStream();
        String filePath = "/tmp/" + bodyPart.getFileName();
        System.out.println("Saving: " + filePath);
        File f = new File(filePath);
        FileOutputStream fos = new FileOutputStream(f);
        byte[] buf = new byte[4096];
        int bytesRead;
        while ((bytesRead = is.read(buf)) != -1) {
            fos.write(buf, 0, bytesRead);
        }
        fos.close();
        attachments.add(f);
        }
    } catch (IOException | MessagingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return attachments;
 }

但是,我总是得到bodyPart.getDisposition(): null. 任何线索我应该如何提取内联附件?

谢谢

PS:我Apple Mail在 Mac 上使用客户端发送带有附件的测试电子邮件。然而电子邮件客户端不应该被关注。

阿克谢·洛库尔

我明白了,确实我必须进行一些“递归”并检查嵌套内容并检查Part.INLINE.equalsIgnoreCase(bodyPart.getDisposition().

以下是代码,认为对某人有用:

private static List<File> extractAttachment(Multipart multipart) {
    List<File> attachments = new ArrayList<File>();
    try {

        for (int i = 0; i < multipart.getCount(); i++) {
        BodyPart bodyPart = multipart.getBodyPart(i);

        if (bodyPart.getContent() instanceof Multipart) {
            // part-within-a-part, do some recursion...
            extractAttachment((Multipart) bodyPart.getContent());
        }

        System.out.println("bodyPart.getDisposition(): " + bodyPart.getDisposition());
        if (!Part.INLINE.equalsIgnoreCase(bodyPart.getDisposition())) {
            continue; // dealing with attachments only
        }

        InputStream is = bodyPart.getInputStream();
        String filePath = "/tmp/" + bodyPart.getFileName();
        System.out.println("Saving: " + filePath);
        File f = new File(filePath);
        FileOutputStream fos = new FileOutputStream(f);
        byte[] buf = new byte[4096];
        int bytesRead;
        while ((bytesRead = is.read(buf)) != -1) {
            fos.write(buf, 0, bytesRead);
        }
        fos.close();
        attachments.add(f);
        }
    } catch (IOException | MessagingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return attachments;
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用EWS提取原始电子邮件文本(标题,正文和编码的附件)

来自分类Dev

如何使用Microsoft Exchange发送电子邮件附件?

来自分类Dev

Java邮件附件损坏

来自分类Dev

使用SwiftMailer从Web表单上载的电子邮件附件

来自分类Dev

使用Java-libpst从.pst文件中提取电子邮件地址

来自分类Dev

在Android中使用Java Mail API向带有附件的电子邮件发送电子邮件

来自分类Dev

使用Java Jackrabbit Web DAV客户端从Exchange Server 2003下载电子邮件附件

来自分类Dev

Java:使用Javamail读取电子邮件

来自分类Dev

Android应用程序使用Java Mail API发送带有附件的电子邮件

来自分类Dev

Java-使用正则表达式从requestURI中提取电子邮件地址

来自分类Dev

使用TIdMessageBuilderHtml设置电子邮件附件名称

来自分类Dev

如何阅读电子邮件附件(当的contentType为text / plain)使用JavaMail API

来自分类Dev

使用imap获取电子邮件附件,但是无论是从Outlook Client还是通过Web发送电子邮件,都会得到不同的结果

来自分类Dev

从收到日期起提取电子邮件附件-VBA

来自分类Dev

使用PHPMailer从目录发送的电子邮件附件并非总是最新的

来自分类Dev

使用SharePoint表单和Power Apps生成电子邮件附件

来自分类Dev

尝试使用红宝石宝石打开/访问电子邮件附件中的文本

来自分类Dev

如何使用mailparser npm模块解析node.js中的电子邮件附件?

来自分类Dev

如何使用Java从Outlook电子邮件2010中提取附件?

来自分类Dev

使用Business Intelligence Dev Studio使用Excel电子邮件附件重复进行季度查询

来自分类Dev

使用Google Apps脚本将文件作为电子邮件附件发送

来自分类Dev

使用Java-libpst从.pst文件中提取电子邮件地址

来自分类Dev

使用Microsoft Access,需要从其他帐户的Outlook电子邮件中提取附件

来自分类Dev

使用Applescript获取有关电子邮件附件的信息

来自分类Dev

使用表情符号发送文本电子邮件附件

来自分类Dev

从电子邮件中提取附件并再次发送,而无需下载Java邮件

来自分类Dev

使用 PHPMailer 发送电子邮件附件

来自分类Dev

如何使用PHP生成多个PDF并通过电子邮件附件发送?

来自分类Dev

如何使用 Xamarin.Essentials 将 PDF 作为电子邮件附件附加?

Related 相关文章

  1. 1

    使用EWS提取原始电子邮件文本(标题,正文和编码的附件)

  2. 2

    如何使用Microsoft Exchange发送电子邮件附件?

  3. 3

    Java邮件附件损坏

  4. 4

    使用SwiftMailer从Web表单上载的电子邮件附件

  5. 5

    使用Java-libpst从.pst文件中提取电子邮件地址

  6. 6

    在Android中使用Java Mail API向带有附件的电子邮件发送电子邮件

  7. 7

    使用Java Jackrabbit Web DAV客户端从Exchange Server 2003下载电子邮件附件

  8. 8

    Java:使用Javamail读取电子邮件

  9. 9

    Android应用程序使用Java Mail API发送带有附件的电子邮件

  10. 10

    Java-使用正则表达式从requestURI中提取电子邮件地址

  11. 11

    使用TIdMessageBuilderHtml设置电子邮件附件名称

  12. 12

    如何阅读电子邮件附件(当的contentType为text / plain)使用JavaMail API

  13. 13

    使用imap获取电子邮件附件,但是无论是从Outlook Client还是通过Web发送电子邮件,都会得到不同的结果

  14. 14

    从收到日期起提取电子邮件附件-VBA

  15. 15

    使用PHPMailer从目录发送的电子邮件附件并非总是最新的

  16. 16

    使用SharePoint表单和Power Apps生成电子邮件附件

  17. 17

    尝试使用红宝石宝石打开/访问电子邮件附件中的文本

  18. 18

    如何使用mailparser npm模块解析node.js中的电子邮件附件?

  19. 19

    如何使用Java从Outlook电子邮件2010中提取附件?

  20. 20

    使用Business Intelligence Dev Studio使用Excel电子邮件附件重复进行季度查询

  21. 21

    使用Google Apps脚本将文件作为电子邮件附件发送

  22. 22

    使用Java-libpst从.pst文件中提取电子邮件地址

  23. 23

    使用Microsoft Access,需要从其他帐户的Outlook电子邮件中提取附件

  24. 24

    使用Applescript获取有关电子邮件附件的信息

  25. 25

    使用表情符号发送文本电子邮件附件

  26. 26

    从电子邮件中提取附件并再次发送,而无需下载Java邮件

  27. 27

    使用 PHPMailer 发送电子邮件附件

  28. 28

    如何使用PHP生成多个PDF并通过电子邮件附件发送?

  29. 29

    如何使用 Xamarin.Essentials 将 PDF 作为电子邮件附件附加?

热门标签

归档