【问题标题】:JavaMail IMAP Connection Refused - Telnet worksJavaMail IMAP 连接被拒绝 - Telnet 有效
【发布时间】:2016-01-29 17:50:39
【问题描述】:

我正在尝试使用 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 服务器位于另一台机器上 - 以前的所有用户都可以访问该机器

我做了一些研究,有人说这可能是防火墙/阻塞问题,但我如何能够通过 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 &lt;your SERVER ip&gt; &lt;your PORT&gt;,如果它没有连接你需要修改你的iptables
  • 你好,就像我在帖子中所说,使用 telnet 时它可以工作。

标签: java networking content-management-system jakarta-mail imap


【解决方案1】:

防火墙通常基于端口工作。这意味着可以允许 telnet (23/TCP) 而阻止 IMAP(通常是 143/993)。

您应该检查防火墙并检查 IMAP 端口是否打开。

【讨论】:

  • 我不确定我明白了.. 当我使用 'telnet ' 时,我没有指定我要使用的端口吗?目前我正在使用 IMAP 端口(不是 23)的 telnet。
【解决方案2】:

您的程序在哪里运行?如果你change getDefaultInstance to getInstance 可以吗?

【讨论】:

  • 使用 JavaMail debug output 和 telnet 命令和输出更新您的帖子。使用复制/粘贴,以免复制错误。您在运行 JavaMail 应用程序的同一台机器上运行 telnet,对吗?
  • 是的,我在同一台机器上执行了 telnet。 @post 已更新。
  • 您具体连接到哪个服务器以及您具体连接到哪个端口?另外,请发布 JavaMail 调试输出。
【解决方案3】:

我找到了解决办法!!

我在远程机器上执行了网络捕获,我看到由于某种原因 javamail api 使用的是默认 IMAP 文件夹,而不是我选择的那个..

进一步的测试表明,将属性值类型更改为 String 而不是 Integer 解决了这个问题。重要的是要注意这在其他环境中没有发生,所以我不确定我必须进行此更改的原因。

【讨论】:

    猜你喜欢
    • 2018-10-27
    • 2015-06-03
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 2015-09-30
    相关资源
    最近更新 更多