JavaMail - 使用代理服务器,因为在连接到办公室网络时无法读取 gmail 代码

JavaMail - Using proxy server since reading gmail code isn't working when connected to office network

当我没有连接到办公室网络时,下面的代码可以正常阅读 gmail

      Properties props = new Properties();        
      props.setProperty("mail.imap.ssl.enable", "true");     
      Session mailSession = Session.getInstance(props); 
      mailSession.setDebug(true);
      Store mailStore = mailSession.getStore("imap");
      mailStore.connect("imap.gmail.com", "abc@gmail.com", "pwd");

但是,当连接到办公网络时,相同的代码不起作用。错误是:

DEBUG: setDebug: JavaMail version 1.6.2
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: closeFoldersOnStoreFailure
DEBUG IMAP: trying to connect to host "imap.gmail.com", port 993, isSSL true
com.sun.mail.util.MailConnectException: Couldn't connect to host, port: imap.gmail.com, 993; timeout -1;
  nested exception is:
    java.net.UnknownHostException: imap.gmail.com
    at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:740)
    at javax.mail.Service.connect(Service.java:366)
    at javax.mail.Service.connect(Service.java:246)
Caused by: java.net.UnknownHostException: imap.gmail.com
    at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:220)
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
    at java.base/java.net.Socket.connect(Socket.java:608)
    at java.base/java.net.Socket.connect(Socket.java:557)
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:359)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:238)
    at com.sun.mail.iap.Protocol.<init>(Protocol.java:134)
    at com.sun.mail.imap.protocol.IMAPProtocol.<init>(IMAPProtocol.java:131)
    at com.sun.mail.imap.IMAPStore.newIMAPProtocol(IMAPStore.java:763)
    at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:698)
    ... 4 more

谷歌搜索后发现建议使用代理。根据 https://javaee.github.io/javamail/FAQ#proxy 从 JavaMail 1.6.0 开始,我们可以设置代理详细信息属性。所以将这些属性添加到代码中:

        Properties props = new Properties();
        props.setProperty("mail.imap.ssl.enable", "true");
        props.setProperty("mail.protocol.proxy.host", "hostdetails");
        props.setProperty("mail.protocol.proxy.port", "80");
        //props.setProperty("mail.imap.socks.host", "hostdetails");
        //props.setProperty("mail.imap.socks.port", "80");
        Session mailSession = Session.getInstance(props);
        mailSession.setDebug(true);
        Store mailStore = mailSession.getStore("imap");
        mailStore.connect("imap.gmail.com", "abc@gmail.com", "pwd");

遇到同样的错误。也尝试添加 props.setProperty("mail.imap.socks.host", "hostdetails"); 但出现相同的错误。知道如何让它发挥作用吗?

正如@Bill Shannon 建议的那样,它在设置以下属性后起作用

props.setProperty("mail.imap.proxy.host", "hostdetails"); 
props.setProperty("mail.imap.proxy.port", "portNumber");

Bill Shannon 的评论你可以在上面看到我的评论。即使在添加以上 2 行之后,我最初也遇到了异常,然后我通过 VPN 连接到办公室 n/w。一旦我去办公室测试它就可以使用这些代理设置!现在我再次使用 VPN 连接到办公室 n/w,并且相同的代码工作正常!!!