我尝试使用JavaMail连接到IMAP服务器(在远程虚拟Linux机器上 - Ubuntu 14 LTS),但我得到以下异常:
java.net.ConnectException: Connection refused
我已经尝试通过Telnet建立连接,一切正常。
我使用的JavaMail版本是1.5.5(也是使用1.4.7测试过),我使用以下属性:
Properties properties = System.getProperties();
properties.setProperty("mail.imap.host", SERVER);
properties.setProperty("mail.store.protocol", "imap");
properties.put("mail.imap.port", PORT);
Session session = Session.getInstance(properties, null);
Store store = session.getStore("imap");
store.connect(USERNAME, PASSWORD);
注意:
我做了一些研究,有些人说这可能是防火墙/阻止问题,但我怎么能通过Telnet连接?
感谢。
被修改
我在测试运行中应用的telnet命令:
telnet <server_ip> <port>
此后,连接成功建立,并且我能够应用IMAP命令,例如列表状态。
javamail失败时的输出如下:
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:233)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
at com.sun.mail.iap.Protocol.<init>(Protocol.java:107)
at com.sun.mail.imap.protocol.IMAPProtocol.<init>(IMAPProtocol.java:104)
at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:538)
... 12 more
答案 0 :(得分:0)
防火墙通常基于端口工作。这意味着可以允许telnet(23 / TCP),而IMAP(通常是143/993)被阻止。
您应检查防火墙并检查IMAP端口是否已打开。
答案 1 :(得分:0)
你的程序在哪里运行?如果你change getDefaultInstance to getInstance有效吗?
答案 2 :(得分:0)
我找到了解决方案!!
我在远程计算机上执行了网络捕获,我看到由于某种原因,javamail api使用的是默认的IMAP文件夹而不是我选择的那个..
进一步测试显示,将属性值类型更改为String而不是Integer解决了此问题。重要的是要注意这在其他环境中没有发生,所以我不确定我必须做出这种改变的原因。