【问题标题】:How to test for secure SMTP mail service on a mail server如何在邮件服务器上测试安全的 SMTP 邮件服务
【发布时间】:2012-04-27 17:27:42
【问题描述】:

我正在做一个项目,用 Java 自动配置用户的电子邮件服务器设置。我正在从他的电子邮件地址中提取邮件服务器,并使用 DirContext 类和 com.sun.jndi.dns.DnsContextFactory 查找该邮件服务器的 MX 记录。

然后我为每个服务器打开一个Socket 并使用HELO 命令测试它们并检查响应。

我的问题是,这仅在我使用不安全的 SMTP 端口 25 进行测试时才有效。如何将其与安全的端口 465 一起使用?

我尝试使用安全套接字

SSLSocketFactory sslsocketfactory = (SSLSocketFactory)SSLSocketFactory.getDefault();
SSLSocket socket = (SSLSocket)sslsocketfactory.createSocket(mailserver, STANDARD_SMTP_PORT);

但是所有连接都会得到如下超时异常

alt1.gmail-smtp-in.l.google.com. java.net.ConnectException: Operation timed out

请帮忙。

更多信息:我没有创建邮件客户端。这是为了简化现有邮件客户端的邮件服务器设置。

【问题讨论】:

    标签: java sockets email smtp network-protocols


    【解决方案1】:

    SMTP-SSL(端口 465)afaik 已被弃用,因此您实际上将在端口 25(或 587 用于 smtp 身份验证连接)上连接“纯文本”,而不是尝试连接到 ssl 套接字,但发送 EHLO 而不是 HELO 并查看服务器是否支持替换已弃用的 SMTP-SSL 的 STARTTLS。客户端发送 STARTTLS 命令后,连接被加密,因此,端口 25 本身并不是“不安全的”

    telnet alt1.gmail-smtp-in.l.google.com 25
    Trying 173.194.71.26...
    Connected to alt1.gmail-smtp-in.l.google.com.
    Escape character is '^]'.
    220 mx.google.com ESMTP i7si4620651lbb.76
    EHLO myserver.com
    250-mx.google.com at your service, [x.x.x.x]
    250-SIZE 35882577
    250-8BITMIME
    250-STARTTLS                  <<--------- this is what you're looking for
    250 ENHANCEDSTATUSCODES
    STARTTLS      <<--- client command to actually start encrypting the traffic
    220 2.0.0 Ready to start TLS
    

    【讨论】:

    • 谢谢。我会检查一下。但是 gmail 的 smtp 服务器是 smtp.gmail.com,它使用 465 端口。那么它怎么能被弃用呢?
    • 许多提供商仍然提供 SMTP-S 以实现向后兼容性。 gmail 也在 smtp.gmail.com 端口 587 上提供 STARTTLS
    【解决方案2】:

    在与服务器建立连接之前,您是否对程序进行了身份验证。每个远程邮件服务器都需要对尝试建立套接字连接的机器进行身份验证。例如,如果您使用 javaMail 库,您将获得添加用户名和密码的选项。在 java 中使用简单套接字时,您需要找到一种解决方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 2014-03-08
      • 2020-02-19
      • 2014-11-15
      • 1970-01-01
      • 2019-02-07
      相关资源
      最近更新 更多