2011-06-23 121 views
0

我使用代碼從較早的線程(已粘貼下面的代碼爲好):訪問使用JavaMail通過IMAP訪問Gmail(使用代理)

Getting mail from GMail into Java application using IMAP

如何讓這段代碼的工作,如果我在代理後面?

該連接正在超時,我試圖尋找解決方案,但無濟於事。

public static void main(String args[]) { 

    Properties props = System.getProperties(); 
    props.setProperty("mail.store.protocol", "imaps"); 
     try { 
      Session session = Session.getDefaultInstance(props, null); 
      Store store = session.getStore("imaps"); 
      store.connect("imap.gmail.com", email, password); 
      System.out.println(store); 

      Folder inbox = store.getFolder("Inbox"); 
      inbox.open(Folder.READ_ONLY); 
      Message messages[] = inbox.getMessages(); 
      for(Message message:messages) { 
      System.out.println(message); 
     } 
    } catch (NoSuchProviderException e) { 
     e.printStackTrace(); 
     System.exit(1); 
    } catch (MessagingException e) { 
     e.printStackTrace(); 
     System.exit(2); 
    } 

} 

謝謝, Chris。

回答

2

後面的代理不阻止你連接到IMAP

可能有兩個原因

  1. 的IMAP端口塊由網絡管理員
  2. 你的IP被封鎖/禁止通過谷歌

感謝

+0

嘗試pinging imap.gmail.com – mtariq

+0

我試過ping imap.google.com:「Ping請求找不到主機imap.google.com,請檢查名稱並重試。」 。我如何知道我的IP是否被禁止?謝謝,克里斯。 – ChrisOdney

+1

確認網絡問題。請聯繫您的ISP或網絡管理員。 – mtariq

2

Check out the Java Mail FAQ

問:我如何配置JavaMail通過我的代理服務器工作 ?

答:的JavaMail 目前不支持通過Web代理服務器 訪問 郵件服務器。 使用代理服務器的主要原因之一是允許來自公司 網絡的HTTP 請求通過企業 防火牆。防火牆通常會阻止對互聯網的大部分訪問,但 將允許來自代理 服務器的請求通過。此外,企業 網絡內 郵件服務器將執行類似的 功能爲電子郵件,通過SMTP接受郵件 ,並將它們轉發到他們的 最終目的地在互聯網上, 並接受傳入的消息和 將它們發送到合適的 內部郵件服務器。

如果您的代理服務器支持SOCKS V4或V5協議 (http://www.socks.nec.com/aboutsocks.html, RFC1928),並允許匿名連接 ,你可以告訴了Java運行時 指示所有TCP套接字 連接到SOCKS服務器。請參閱 網絡屬性指南 socksProxyHost和socksProxyPort 屬性的最新文檔。這些屬性是系統級 屬性,而不是JavaMail會話 屬性。當調用應用程序 時,可以從 命令行設置它們,例如:java -DsocksProxyHost = myproxy ....此工具可用於將來自JavaMail的SMTP,IMAP和POP3通信 指向服務器的SOCKS代理 。請注意,設置這些 屬性會將所有TCP套接字指向SOCKS代理的 ,這可能會對您的應用程序的其他方面造成負面影響 。

沒有這樣的SOCKS服務器,如果你 想使用JavaMail來直接 防火牆外部 訪問郵件服務器,防火牆將需要 配置爲允許這種訪問。 JavaMail不支持通過HTTP代理Web服務器訪問 。