繁体   English   中英

使用Java Mail API从Gmail导出所有电子邮件

[英]Exporting all emails from Gmail with Java Mail API

因此,我正在尝试编写一个程序,该程序将从电子邮件地址中提取所有电子邮件并将其保存到文本文件中,而我遇到的问题是使用Java Mail API捕获了多于1封电子邮件。

这是我用来获取正常工作的电子邮件的方法,但是我想在收件箱中获取所有电子邮件:

    public static void checkMail(String username, String password) {
    Properties props = new Properties();
    props.setProperty("mail.store.protocol", "imaps");
    try {
        Session session = Session.getInstance(props, null);
        Store store = session.getStore();
        store.connect("imap.gmail.com", username, password);
        Folder inbox = store.getFolder("INBOX");
        inbox.open(Folder.READ_ONLY);
        Message msg = inbox.getMessage(inbox.getMessageCount());
        Address[] in = msg.getFrom();
        for (Address address : in) {
            System.out.println("FROM:" + address.toString());
        }
        Multipart mp = (Multipart) msg.getContent();
        BodyPart bp = mp.getBodyPart(0);
        System.out.println("SENT DATE:" + msg.getSentDate());
        System.out.println("SUBJECT:" + msg.getSubject());
        System.out.println("CONTENT:" + bp.getContent());
    } catch (Exception mex) {
        mex.printStackTrace();
    }
}

如果有人能告诉我如何做或解释它,那将不胜感激。

如果您希望文件夹收件箱中的所有邮件都执行以下操作:

public static void checkMail(String username, String password) {
    Properties props = new Properties();
    props.setProperty("mail.store.protocol", "imaps");
    try {
        Session session = Session.getInstance(props, null);
        Store store = session.getStore();
        store.connect("imap.gmail.com", username, password);
        Folder inbox = store.getFolder("INBOX");
        inbox.open(Folder.READ_ONLY);
        Message[] msgs = inbox.getMessages();

        for (Message msg : msgs) {
            try {
                Address[] in = msg.getFrom();
                for (Address address : in) {
                    System.out.println("FROM:" + address.toString());
                }
                Multipart mp = (Multipart) msg.getContent();
                BodyPart bp = mp.getBodyPart(0);
                System.out.println("SENT DATE:" + msg.getSentDate());
                System.out.println("SUBJECT:" + msg.getSubject());
                System.out.println("CONTENT:" + bp.getContent());
            } catch (Exception e) {

                e.printStackTrace();
            }
        }
        // close folder and store (normally in a finally block)
        inbox.close(false);
        store.close();

    } catch (Exception mex) {
        mex.printStackTrace();
    }
}

如果要从其他文件夹发送邮件,则必须对所有文件夹执行相同的操作。 您可以通过store.getDefaultFolder()。list()获得它们(对所有文件夹都执行此递归操作,因为文件夹可以包含子文件夹)

protected void recurseFolders(final Folder folder) {
    // folder can hold messages
    if ((folder.getType() & Folder.HOLDS_MESSAGES) != 0) {

        // process them

    }

    // folder can hold other folders
    if ((folder.getType() & Folder.HOLDS_FOLDERS) != 0) {
        for (final Folder subfolder : folder.list()) {

            // process them recursive
            recurseFolders(subfolder);

        }
    }

}

在这里查看: https//github.com/salyh/elasticsearch-river-imap

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM