簡體   English   中英

聽進來的郵件-JavaMail

[英]listen to incoming mails - JavaMail

我正在嘗試編寫一個假定偵聽傳入消息的類。 我已在收件箱中添加了一個偵聽器。

我解析收件箱中的消息以查找特定的電子郵件,當找到該電子郵件時,我希望我的聽眾停止聽收件箱。

如何才能做到這一點?

這是我的代碼:

public Map<String, Object> read(String id, Risk risk) {

    setID(id);

        try {
            Properties props = new Properties();
            props.setProperty("mail.store.protocol", "imaps");
            Session session = Session.getInstance(props, null);
            Store store = session.getStore();
            store.connect("imap.gmail.com", email, password);
            Folder inbox = store.getFolder("INBOX");
            inbox.open(Folder.READ_ONLY);

            inbox.addMessageCountListener(new MessageCountAdapter() {
                public void messagesAdded(MessageCountEvent ev) {
                    setListenerExists(true);
                    boolean emailFound = false;
                    Message[] msgs = ev.getMessages();
                    System.out.println("Got " + msgs.length + " new messages");

                    if (msgs.length >= 1){
                        for (Message msg: msgs){
                            try {
                                Object o = msg.getContent();
                                if (o instanceof String){
                                    hm = parser.parseMessage(adr, msg.getSubject(), msg.getContent(), getID());

                                    System.out.println("FROM : " + adr);
                                    System.out.println("SUBJECT : " + msg.getSubject());
                                    System.out.println("HTML : " + msg.getContent());


                                }
                                else if (o instanceof Multipart){
                                    Multipart mp = (Multipart) o;
                                    BodyPart bp = mp.getBodyPart(0);
                                    hm = parser.parseMessage(adr, msg.getSubject(), bp.getContent(), getID());
                                    /*
                                    System.out.println("FROM : " + adr);
                                    System.out.println("SUBJECT : " + msg.getSubject());
                                    System.out.println("HTML : " + bp.getContent());
                                    */
                                }
                                    Iterator<Integer> it = hm.keySet().iterator();
                                    while (it.hasNext()){
                                        if (it.next() == 1){
                                            map = extractValues(hm.get(1));
                                            setMap(map);
                                            //emailReceived = true;
                                            //setEmailReceived(true);
                                            //extractValues(hm.get(1));
                                        }else{
                                            /*
                                             * TODO : remove listener
                                             * setLisetn
                                             */
                                            System.out.println("HM is Null!");
                                        }
                                    }

                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (MessagingException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                    }
                    }
                    /*
                    while (emailFound == false){
                         for (Message msg : msgs){
                             try {
                                Object o = msg.getContent();

                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (MessagingException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                         }
                    }
                    */
                }

            });
            // Check mail once in "freq" MILLIseconds
            boolean supportsIdle = false;
            try {
            if (inbox instanceof IMAPFolder) {
                IMAPFolder f = (IMAPFolder)inbox;
                f.idle();
                supportsIdle = true;
            }
            } catch (FolderClosedException fex) {
            throw fex;
            } catch (MessagingException mex) {
            supportsIdle = false;
            }
            for (;;) {
            if (supportsIdle && inbox instanceof IMAPFolder) {
                IMAPFolder f = (IMAPFolder)inbox;
                f.idle();
                System.out.println("IDLE done");
            } else {
                Thread.sleep(20000); // sleep for freq milliseconds

                // This is to force the IMAP server to send us
                // EXISTS notifications. 
                inbox.getMessageCount();
            }
        } 

        }catch (MessagingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return getMap();


}

public void setID(String id){
    this.riskId = id;
}
public String getID(){
    return riskId;
}
public void setMap(Map<String, Object> m){
    this.map = m;
}
public Map<String, Object> getMap(){
    return map;
}
public void setListenerExists(boolean exists){
    this.listener = exists;
}
public boolean getListenerExists(){
    return listener;
}

/** extracts values from hashmap received from the parser **/
public Map<String, Object> extractValues(HashMap<String, EmailData> h){
    System.out.println("I'M Called");
    Risk risk = new Risk();
    String id = "";
    String sender = "";
    String answer = "";
    HashMap<String, String> data;
    Iterator<String> it = h.keySet().iterator();
    while (it.hasNext()){
        id = it.next();
        EmailData ed = h.get(id);
        sender = ed.getEmail();
        answer = ed.getAnswer();
    }
    Map<String, Object> map = createVariablesToInsert(id, sender, answer);
    return map;
}
   public Map<String, Object> createVariablesToInsert(String id, String sender, String answer){
       Map<String, Object> map = new HashMap<String, Object>();
       System.out.println("I'M Called");
       System.out.println("UUID : " + id);
       System.out.println("USER : " + sender);
       System.out.println("ANSWE : " + answer);
        map.put("uuid", id);
        map.put("user", sender);
        map.put("ans", answer);
        System.out.println("ID : " + map.get("uuid"));
        System.out.println("USER : " + map.get("user"));
        System.out.println("ANS : " + map.get("ans"));

        System.out.println("ID in insert");

        return map;
   }

}

請注意,必須將兩個變量聲明為final。 它允許訪問MessageCountAdapter實現內的那些變量

final Folder inbox = store.getFolder("INBOX");
final MessageCountAdapter listener = new MessageCountAdapter() {
    boolean emailFound = false;
    // do something
    if (emailFound) {
        inbox.removeMessageCountListener(listener);
    }
}
inbox.addMessageCountListener(listener);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM