2016-05-24 40 views
1

我試圖用Java創建一個程序進入我的gmail帳戶並打印未讀電子郵件的發件人,主題和正文。使用imap接收使用Java的電子郵件拋出連接超時

下面的代碼:

import java.util.*; 
import javax.mail.*; 

public class CheckingMails { 

    public static void main(String[] args) { 
     Properties props = new Properties(); 
     props.setProperty("mail.store.protocol", "imaps"); 
     try { 
      Session session = Session.getInstance(props, null); 
      Store store = session.getStore(); 
      store.connect("imap.gmail.com", "[email protected]", "password"); 
      Folder inbox = store.getFolder("INBOX"); 
      inbox.open(Folder.READ_ONLY); 
      Message msg = inbox.getMessage(inbox.getMessageCount()); 
      Address[] in = msg.getFrom(); 
      for (Address address : in) { 
       System.out.println("FROM:" + address.toString()); 
      } 
      Multipart mp = (Multipart) msg.getContent(); 
      BodyPart bp = mp.getBodyPart(0); 
      System.out.println("SENT DATE:" + msg.getSentDate()); 
      System.out.println("SUBJECT:" + msg.getSubject()); 
      System.out.println("CONTENT:" + bp.getContent()); 
     } catch (Exception mex) { 
      mex.printStackTrace(); 
     } 
    } 
} 

這裏是出現錯誤,我不明白這些錯誤的原因。

任何人都知道我可以修復它嗎?

javax.mail.MessagingException: Connessione scaduta; 
    nested exception is: 
    java.net.ConnectException: Connessione scaduta 
    at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:670) 
    at javax.mail.Service.connect(Service.java:295) 
    at javax.mail.Service.connect(Service.java:176) 
    at CheckingMails.main(CheckingMails.java:12) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) 
Caused by: java.net.ConnectException: Connessione scaduta 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
    at java.net.Socket.connect(Socket.java:579) 
    at java.net.Socket.connect(Socket.java:528) 
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:321) 
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:237) 
    at com.sun.mail.iap.Protocol.<init>(Protocol.java:116) 
    at com.sun.mail.imap.protocol.IMAPProtocol.<init>(IMAPProtocol.java:115) 
    at com.sun.mail.imap.IMAPStore.newIMAPProtocol(IMAPStore.java:685) 
    at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:636) 
    ... 8 more 

謝謝。

+0

爲了增加獲得答案的機會,您應該添加完整的堆棧跟蹤。 「... ...更多」是一個不完整的問題的解決辦法。 – reporter

+0

我對意大利語言並不是很堅定,但我認爲「Connessione scaduta」意思是「連接超時」,這會導致思考代理或防火牆問題。 – Frank

+0

是,「Connessione scaduta」=「連接超時」 – DavidRT49

回答

0

代碼沒有問題。從意大利到英語的翻譯錯誤是:connection timed out

嘗試添加以下屬性到你的道具對象來替代默認的值:

props.setProperty("mail.imap.port", "993"); 
props.setProperty("mail.imap.connectiontimeout", "5000"); 
props.setProperty("mail.imap.timeout", "5000"); 

如果錯誤仍然存​​在,你可以在CMD線使用命令telnet imap.gmail.com {port number}檢查端口連接。該錯誤可能是由防火牆或網絡問題引起的。