2

我正在开发一个项目,以在 Java 中自动配置用户的电子邮件服务器设置。我正在从他的电子邮件地址中提取邮件服务器,并DirContext使用com.sun.jndi.dns.DnsContextFactory.

然后我打开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

请帮忙。

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

4

2 回答 2

0

SMTP-SSL(端口 465)afaik 已被弃用,因此与其尝试连接到 ssl 套接字,不如在端口 25(或 587 用于 smtp auth 连接)上实际连接“纯文本”,但发送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
于 2012-04-16T14:18:23.680 回答
0

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

于 2012-04-30T09:31:50.610 回答