JavaMail IMAP 连接被拒绝 - Telnet 工作
JavaMail IMAP Connection Refused - Telnet works
我正在尝试使用 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);
备注:
- 它在我的个人机器上运行
- 正在另一台外部机器上工作
- 它在远程 linux 虚拟机上失败
- IMAP 服务器在不同的机器上 - 以前的所有
都可以访问
我做了一些研究,有人告诉我这可能是一个 firewall/blocking 问题,但我如何才能通过 Telnet 连接?
谢谢。
已编辑
我在测试中应用的telnet命令-运行:
telnet <server_ip> <port>
在此之后,连接成功建立,我可以应用 IMAP 命令,例如 list status。
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
防火墙通常基于端口工作。这意味着可以允许 telnet (23/TCP) 而阻止 IMAP(通常是 143/993)。
您应该检查防火墙并检查IMAP 端口是否打开。
你的程序在哪里运行?如果你 change getDefaultInstance to getInstance 它有效吗?
我找到了解决办法!!
我在远程机器上执行了网络捕获,我发现由于某种原因 javamail api 使用的是默认 IMAP 文件夹,而不是我选择的文件夹..
进一步的测试表明,将 属性 值类型更改为 String 而不是 Integer 可以解决此问题。重要的是要注意这在其他环境中没有发生,所以我不确定我必须进行此更改的原因。
我正在尝试使用 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);
备注:
- 它在我的个人机器上运行
- 正在另一台外部机器上工作
- 它在远程 linux 虚拟机上失败
- IMAP 服务器在不同的机器上 - 以前的所有 都可以访问
我做了一些研究,有人告诉我这可能是一个 firewall/blocking 问题,但我如何才能通过 Telnet 连接?
谢谢。
已编辑
我在测试中应用的telnet命令-运行:
telnet <server_ip> <port>
在此之后,连接成功建立,我可以应用 IMAP 命令,例如 list status。
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
防火墙通常基于端口工作。这意味着可以允许 telnet (23/TCP) 而阻止 IMAP(通常是 143/993)。
您应该检查防火墙并检查IMAP 端口是否打开。
你的程序在哪里运行?如果你 change getDefaultInstance to getInstance 它有效吗?
我找到了解决办法!!
我在远程机器上执行了网络捕获,我发现由于某种原因 javamail api 使用的是默认 IMAP 文件夹,而不是我选择的文件夹..
进一步的测试表明,将 属性 值类型更改为 String 而不是 Integer 可以解决此问题。重要的是要注意这在其他环境中没有发生,所以我不确定我必须进行此更改的原因。