读取未读邮件并使用java将其标记为未看到

时间:2018-02-06 11:24:42

标签: javamail read-unread

请帮我完成这项任务。任务是读取未读电子邮件的正文,并使用java将其标记为看不见或未读。我尝试了一些程度,但每当我对读取体使用getContect()方法时,它会自动设置为READ。下面我附上了我的代码供参考,非常感谢您提前获得帮助。

package com;


import java.util.Properties;





import javax.activation.DataHandler;
import javax.mail.BodyPart;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.UIDFolder;
import javax.mail.search.FlagTerm;

public class ReadMail {
    static String hostName="imap.mail.yahoo.com";
    static String username="user@yahoo.com";
    static String password="password";
    static long maxUid=5;

    /**
     * @param args
     */
    /**
     * @param args
     */
    public static void main(String[] args) {
        Properties sysProps = System.getProperties();

        sysProps.setProperty("mail.store.protocol", "imaps");

        try {

            Session session = Session.getInstance(sysProps, null);

            Store store = session.getStore();

            store.connect(hostName, username, password);

            Folder emailInbox = store.getFolder("INBOX");
            UIDFolder uf = (UIDFolder)emailInbox;

            emailInbox.open(Folder.READ_WRITE);

            int messageCount = emailInbox.getMessageCount();

            System.out.println("Total Message Count: " + messageCount);

            int unreadMsgCount = emailInbox.getUnreadMessageCount();

            System.out.println("Unread Message Count: " + unreadMsgCount);



            Flags seen = new Flags(Flags.Flag.SEEN);
            FlagTerm unseenFlagTerm = new FlagTerm(seen, false);
            Message unreadmsg[] = emailInbox.search(unseenFlagTerm);

            //Message[] message = emailInbox.getMessages(); ///Will get all messages

            // Display message.
            if(unreadmsg.length==0)
                System.out.println("No new  messages found.\n");
            for (int i = 0; i < unreadmsg.length; i++) {
                if(uf.getUID(unreadmsg[i])>maxUid){
                    System.out.println("------------ Message "  + i+ " ------------");

                    System.out.println("SentDate : " + unreadmsg[i].getSentDate());
                    System.out.println("From : " + unreadmsg[i].getFrom());
                    System.out.println("Subject : " + unreadmsg[i].getSubject());
                    maxUid=uf.getUID(unreadmsg[i]);

                    Multipart multipart = (Multipart) unreadmsg[i].getContent();

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

                        String disposition = bodyPart.getDisposition();

                        if (disposition != null && (disposition.equals(BodyPart.ATTACHMENT))) {
                            System.out.println("Please find the   attachment : ");

                            DataHandler handler = bodyPart.getDataHandler();
                            System.out.println("Attachment Name: " + handler.getName());
                        } else {
                            System.out.println(bodyPart.getContent());
                        }
                    }
                    System.out.println();

                }


            }



            emailInbox.close(true);

            store.close();

        } catch (Exception mex) {

            mex.printStackTrace();

        }



    }

}

1 个答案:

答案 0 :(得分:0)

最简单的方法是打开文件夹READ_ONLY。

如果这还不够,可以将属性mail.imaps.peek设置为true。