有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在邮件服务器上测试安全SMTP邮件服务

我正在做一个用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

请帮忙

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


共 (2) 个答案

  1. # 1 楼答案

    SMTP-SSL(端口465)afaik已被弃用,因此,与其尝试连接到SSL套接字,不如在端口25(或587用于SMTP身份验证连接)上连接“明文”,但发送EHLO而不是HELO,并查看服务器是否支持STARTTLS来替换弃用的SMTP-SSL。客户端发送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
    
  2. # 2 楼答案

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