[英]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.