2017-05-29 106 views
0

我無法連接IMAP郵件服務器以從jdk8中獲取郵件,但它在jdk7中正常工作。 下面是我的代碼無法在JDK 8上連接電子郵件服務器

private Properties getServerProperties(String protocol, String host, String port) { 
    Properties properties = new Properties(); 
    properties.put(String.format("mail.%s.host", protocol), host); 
    properties.put(String.format("mail.%s.port", protocol), port); 
    properties.setProperty(String.format("mail.%s.socketFactory.class", protocol), "javax.net.ssl.SSLSocketFactory"); 
    properties.setProperty(String.format("mail.%s.socketFactory.fallback", protocol), "false"); 
    properties.setProperty(String.format("mail.%s.socketFactory.port", protocol), String.valueOf(port)); 
    return properties; 
} 

public void getNewEmails(String protocol, String host, String port, String userName, String password) { 
    Properties properties = getServerProperties(protocol, host, port); 
    Session session = Session.getDefaultInstance(properties); 
    session.setDebug(true); 

    try { 
     Store store = session.getStore(protocol); 
     store.connect(userName, password); 

     Folder inbox = store.getFolder("INBOX"); 
     inbox.open(Folder.READ_WRITE); 

     int count = inbox.getMessageCount(); 
     Message[] messages = inbox.getMessages(1, count); 
     for (Message message : messages) { 

      Address[] fromAddresses = message.getFrom(); 
      System.out.println("..................."); 
      System.out.println("\t From: " + fromAddresses[0].toString()); 
      System.out.println("\t To: " + parseAddresses(message.getRecipients(RecipientType.TO))); 
      System.out.println("\t CC: " + parseAddresses(message.getRecipients(RecipientType.CC))); 
      System.out.println("\t Subject: " + message.getSubject()); 
      System.out.println("\t Sent Date:" + message.getSentDate().toString()); 
      System.out.println(message.getContent()); 
     } 
     inbox.close(false); 
     store.close(); 
    } catch (NoSuchProviderException ex) { 
     System.out.println("No provider for protocol: " + protocol); 
     ex.printStackTrace(); 
    } catch (MessagingException ex) { 
     System.out.println("Could not connect to the message store"); 
     ex.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

private String parseAddresses(Address[] address) { 

    String listOfAddress = ""; 
    if ((address == null) || (address.length < 1)) 
     return null; 
    if (!(address[0] instanceof InternetAddress)) 
     return null; 

    for (int i = 0; i < address.length; i++) { 
     InternetAddress internetAddress = (InternetAddress) address[0]; 
     listOfAddress += internetAddress.getAddress() + ","; 
    } 
    return listOfAddress; 
} 

當我嘗試在store.connect(userName, password);

運行它懸掛在上面的代碼下面是從我試過上面的代碼http://www.developer.com/java/data/monitoring-email-accounts-imap-in-java.html的鏈接。 這是一個沒有回答問題的鏈接 https://community.oracle.com/message/13244272#13244272

下面是使用JDK運行時的日誌。

JDK 7日誌:

DEBUG:setDebug: 

JavaMail version 1.5.0- 
b01 
DEBUG: 

getProvider() returning javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle] 
DEBUG IMAP: mail.imap.fetchsize: 16384 
DEBUG IMAP: mail.imap.ignorebodystructuresize: false 
DEBUG IMAP: mail.imap.statuscachetimeout: 1000 
DEBUG IMAP: mail.imap.appendbuffersize: -1 
DEBUG IMAP: mail.imap.minidletime: 10 
DEBUG IMAP: trying to connect to host "XXXXXXXXXXXXXXXXXXX", port 993, isSSL false 
* OK server ready. Unauthorized Access Prohibited. 
A0 CAPABILITY 
* CAPABILITY IMAP4REV1 IDLE AUTH=PLAIN 
A0 OK CAPABILITY completed 
DEBUG IMAP: AUTH: PLAIN 
DEBUG IMAP: protocolConnect login, host=XXXXXXXXXXXXXXXXXXX, user=XXXXXXXXXXXXXXXXXXX, password=<non-null> 
DEBUG IMAP: AUTHENTICATE PLAIN command trace suppressed 
DEBUG IMAP: AUTHENTICATE PLAIN command result: A1 OK AUTHENTICATE completed 
A2 CAPABILITY 
* CAPABILITY IMAP4REV1 IDLE AUTH=PLAIN 
A2 OK CAPABILITY completed 
DEBUG IMAP: AUTH: PLAIN 
DEBUG IMAP: connection available -- size: 1 
A3 SELECT INBOX 

JDK 8日誌:

DEBUG:setDebug: 

JavaMail version 1.5.0- 
b01 
DEBUG: 

getProvider() returning javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle] 
DEBUG IMAP: mail.imap.fetchsize: 16384 
DEBUG IMAP: mail.imap.ignorebodystructuresize: false 
DEBUG IMAP: mail.imap.statuscachetimeout: 1000 
DEBUG IMAP: mail.imap.appendbuffersize: -1 
DEBUG IMAP: mail.imap.minidletime: 10 
DEBUG IMAP: trying to connect to host "XXXXXXXXXXXXXXXXXXX", port 993, isSSL false 
* OK server ready. Unauthorized Access Prohibited. 
A0 CAPABILITY 
* CAPABILITY IMAP4REV1 IDLE AUTH=PLAIN 
A0 OK CAPABILITY completed 
DEBUG IMAP: AUTH: PLAIN 
DEBUG IMAP: protocolConnect login, host=XXXXXXXXXXXXXXXXXXX, user=XXXXXXXXXXXXXXXXXXX, password=<non-null> 
DEBUG IMAP: AUTHENTICATE PLAIN command trace suppressed 

它掛起並沒有響應上述行之後。

+0

@DoNhuVy我已經從這兩個jdk中添加了日誌。 –

+1

修復這些[常見的JavaMail錯誤](https://javaee.github.io/javamail/FAQ#commonmistakes)並升級到[當前版本的JavaMail](https://javaee.github.io/javamail/)。如果這不能解決問題,請通過[email protected]與我聯繫以獲取更詳細的調試建議;我們可能需要查看您不想在此處發佈的身份驗證詳細信息。 –

回答

0
After Bill Shannon comment I tried below configuration and it start working with below configuration with JDK-8. 

`<dependency> 
<groupId>com.sun.mail</groupId> 
<artifactId>javax.mail</artifactId> 
<version>1.5.5</version> 
</dependency>` 
相關問題