2015-11-04 59 views
2

我正在使用JavaMail Api從Gmail帳戶讀取郵件。但問題是我只能閱讀一次。有沒有辦法一次又一次地閱讀郵件?
我的Java代碼是:`import java.util.Properties; import javax.mail.BodyPart; import javax.mail.Folder; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.NoSuchProviderException; import javax.mail.Session; import javax.mail.Store;從Gmail中使用JavaMail API一次又一次地閱讀郵件

public class Main { 

    // main function. Project run starts from main function... 
    public static void main(String[] args) { 

     String host = "pop.gmail.com";// change accordingly 
     String mailStoreType = "pop3"; 
     String username = "[email protected]";// change accordingly 
     String password = "your_password";// change accordingly 

     check(host, mailStoreType, username, password); 
    } 


    // function to make connection and get mails from server known as "Pop" server 
    public static void check(String host, String storeType, String user, String password) 
    { 
     try { 

     //create properties field 
     Properties properties = new Properties(); 

     properties.put("mail.pop3.host", host); 
     properties.put("mail.pop3.port", "995"); 
     properties.put("mail.pop3.starttls.enable", "true"); 
     Session emailSession = Session.getDefaultInstance(properties); 

     //create the POP3 store object and connect with the pop server 
     Store store = emailSession.getStore("pop3s"); 

     store.connect(host, user, password); 

     //create the folder object and open it 
     Folder emailFolder = store.getFolder("Inbox"); 

     emailFolder.open(Folder.READ_ONLY); 

     // retrieve the messages from the folder in an array and print it 
     Message[] messages = emailFolder.getMessages(); 
     System.out.println("messages.length---" + messages.length); 

     for (int i = 0, n = messages.length; i < n; i++) { 
     Message message = messages[i]; 


     Object obj = message.getContent(); 
     Multipart mp = (Multipart)obj; 
     BodyPart bp = mp.getBodyPart(0); 


     System.out.println("---------------------------------"); 
     System.out.println("Email Number " + (i + 1)); 
     System.out.println("Subject: " + message.getSubject()); 
     System.out.println("From: " + message.getFrom()[0]); 
     System.out.println("To: " + message.getAllRecipients().toString()); 
     System.out.println("Received Date:" + message.getReceivedDate()); 
     System.out.println("Text: " + bp.getContent().toString()); 
     } 

     //close the store and folder objects 
     emailFolder.close(false); 
     store.close(); 

     } catch (NoSuchProviderException e) { 
     e.printStackTrace(); 
     } catch (MessagingException e) { 
     e.printStackTrace(); 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
    } 
}`  

在這段代碼中,我使用pop服務器來讀取郵件,現在我給它發送郵件和密碼並運行。它工作正常,但它只讀取一次電子郵件,下次如果我運行程序,工具包給我的消息數量等於0 ... 我想多次閱讀消息一次又一次,因爲我想... 任何幫助將不勝感激...

+0

http://stackoverflow.com/questions/4389994/does-javamail-support-server-push – sidgate

+0

是否有任何會話問題? –

+0

我注意到它讀取的郵件已經沒有通過使用gmail APi讀取。 如果我收到新郵件,那麼它正在閱讀它,但在此之後,我再次給出等於0的消息數。 –

回答

1

如果你想每次都得到所有的電子郵件,IMAP服務器將是最好的。

您可以將郵件服務器更改爲

IMAP.gmail.com

,端口將993(考慮您正在使用Gmail帳戶)。

Link sidgate提供的將是您最好的例子。