JavaMail - использование прокси-сервера, поскольку чтение кода Gmail не работает при подключении к офисной сети - PullRequest
0 голосов
/ 01 февраля 2020

Ниже код для чтения 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

После поиска в Google нашел предложение использовать прокси. В соответствии с 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");, но получил ту же ошибку. Есть идеи как заставить это работать?

1 Ответ

0 голосов
/ 03 февраля 2020

Как @Bill Shannon предположил, что это работает после установки следующих свойств

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

, вы можете увидеть мои комментарии выше для комментариев Билла Шеннона. Я изначально получил исключения даже после добавления выше 2 строк, и я был подключен к офису н / ж через VPN тогда. Однажды я пошел в офис и проверил, работает ли он с этими настройками прокси! И теперь я снова подключился к офису н / ж, используя VPN, и тот же код работает отлично !!!

...