访问使用JavaMail通过IMAP访问Gmail(使用代理)

问题描述:

我使用代码从较早的线程(已粘贴下面的代码为好):访问使用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。

后面的代理不阻止你连接到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

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服务器访问 。