我们正在从gmail服务器检索邮件。我们可以在没有代理的情况下连接到gmail服务器。由于我们学院有代理设置,即使设置了系统属性,我们也无法连接到gmail服务器。我们可以从我们的浏览器连接到gmail.com但我们无法从我们的程序连接。
Properties props = System.getProperties();
props.setProperty("http.proxyHost", "proxyhost");
props.setProperty("http.proxyPort", "proxynumber");
props.setProperty( "mail.imap.socketFactory.class", SSL_FACTORY);
props.setProperty( "mail.imap.socketFactory.fallback", "false");
props.setProperty( "mail.imap.port", "993");
props.setProperty( "mail.imap.socketFactory.port", "993");
props.put("mail.imap.host", "imap.gmail.com");
Session session = Session.getDefaultInstance(props, null);
store = session.getStore("imap");
store.connect(dialog.getServer(),dialog.getUsername(),dialog.getPassword());
我们得到此异常
java.net.UnknownHostException: imap.gmail.com
at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:618)
at javax.mail.Service.connect(Service.java:291)
at javax.mail.Service.connect(Service.java:172)
at EmailClient.connect(EmailClient.java:373)
at EmailClient.main(EmailClient.java:475)
by: java.net.UnknownHostException: imap.gmail.com
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(Unknown Source)
at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(Unknown Source
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:284)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:201)
at com.sun.mail.iap.Protocol.<init>(Protocol.java:109)
at com.sun.mail.imap.protocol.IMAPProtocol.<init>(IMAPProtocol.java:104)
at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:585)
答案 0 :(得分:0)
您的代理可能使用NTLM身份验证,我以前遇到过Java和NTLM身份验证问题。不确定它是否真的是代理给你提出问题。
在任何情况下,您可能希望直接使用GMail API for Java g4j,而不是直接使用JavaMail API。它将抽象出大多数处理gmail的复杂性。
快乐的编码!
答案 1 :(得分:0)
JavaMail会not currently support访问邮件服务器 通过Web代理服务器。
如果您的代理服务器支持SOCKS V4或V5协议并允许 匿名连接,您正在使用JDK 1.5或更高版本和JavaMail 1.4.5或更新版本,您可以配置SOCKS代理