如何用Java测试邮件服务器是否存活?

11

使用JavaMail API有没有一种方法可以检查正在使用的邮件服务器是否正常?

如果没有,那么如何使用Java代码进行检查呢?

非常感谢您的帮助。


定义“邮件服务器正常运行”的状态。 - pingw33n
3个回答

11
如果您已经有一个Session实例的引用,您可以执行以下操作:
Session s = //a JavaMail session I got from somewhere
boolean isConnected = s.getTransport("smtp").isConnected();

如果邮件客户端连接到适当的SMTP服务器,通常意味着它是活动的。

2
如果您刚创建了一个新的会话并想要调用 isConnected(),则最初必须调用方法 getTransport("smtp").connect() - Radu Linu

5

通过JavaMail API,您可以尝试发送电子邮件并查看是否已成功发送。

从连接的角度来看,您只需ping它:

  InetAddress host = InetAddress.getByName("mailserver");
  System.out.println("host.isReachable(1000) = " + host.isReachable(1000));

好的,所以您确认第一个解决方案是唯一的:服务器不需要响应ping命令也可以正常工作。 - Denis R.
@DenisR。没错,服务器很可能会忽略ICMP回显请求。 - Icarus
这并不是唯一可能的解决方案。SMTP服务器很可能会忽略ICMP回显请求,但它们不会忽略对25号端口的TCP连接。 - Sean Reilly

1

从这个链接中,您可以使用以下逻辑:

public boolean isAlive() throws MessagingException {
  session.setDebug(true);
  Transport transport = session.getTransport("smtp");
  transport.connect();
  if (transport.isConnected()) {
    transport.close();
    return true;
  }
  return false;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接