2013-04-19 1 views
0

10 초마다 수신함을 확인하는 스레드가 있습니다. 내 메일 세션을 생성하고 루프를 저장하고 전에 가게 에 연결 :Java에서 메일을 동적으로 읽음

store.connect() 
while (running) { 
    Thread.sleep(emailReceiveInterval); 
    inbox = store.getFolder("INBOX"); 
    inbox.open(Folder.READ_WRITE); 
    Message[] emails = inbox.getMessages(); 
    [...] 
    inbox.close(true); 
} 

그게 문제는 스레드가 실행되는 동안 새로운 이메일이 포착되지 않은 것입니다.

그래서, 연결을 시도하고 루프의 가게에 근접했다 :

while (running) { 
    try { 
     Thread.sleep(emailReceiveInterval); 
     store.connect(); 
     inbox = store.getFolder("INBOX"); 
     inbox.open(Folder.READ_WRITE); 
     Message[] emails = inbox.getMessages(); 
     [...] 
    finally { 
     inbox.close(true); // Exception handling not posted 
     store.close();  // Exception handling not posted 
    } 
} 

첫 번째 루프는 괜찮 모든 이메일이 제대로 수신하지만 지금은 두 번째 가게에 NullPointerException이 나타납니다 .connect() :

java.lang.NullPointerException: null 
    at org.apache.geronimo.javamail.store.pop3.POP3Store.protocolConnect(POP3Store.java:164) ~[geronimo-javamail_1.4_mail-1.8.2.jar:1.8.2] 
    at javax.mail.Service.connect(Service.java:251) ~[geronimo-javamail_1.4_mail-1.8.2.jar:1.8.2] 
    at javax.mail.Service.connect(Service.java:91) ~[geronimo-javamail_1.4_mail-1.8.2.jar:1.8.2] 
    at javax.mail.Service.connect(Service.java:76) ~[geronimo-javamail_1.4_mail-1.8.2.jar:1.8.2] 
    at com.company.MyClass$ReceivingThread.run(MyClass.java:161) ~[target-eclipse/:na] 

내가받은 편지함 모든 루프에 새로 고쳐집니다 그렇게해야합니까?

+0

더 빨리 더 도움 들어, [SSCCE] (http://sscce.org/)를 게시 : 문제는 내가 또한 내에서 루프를 세션마다 에서 상점을 검색 할 수있는 것이 었습니다. –

답변

0

좋아, 나는 그것을 알아 냈다.

url = new URLName(mailProtocol, incomingHost, 995, "", incomingUserName,  incomingUserName); 
session.getStore(url)