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

时间:2012-04-16 11:25:11

标签: java sockets email smtp network-protocols

我正在开发一个项目,用Java自动配置用户的电子邮件服务器设置。我正在从他的电子邮件地址中提取邮件服务器,并使用DirContextcom.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 个答案:

答案 0 :(得分:0)

SMTP-SSL(端口465)afaik已被弃用,因此您不是尝试连接到ssl套接字,而是实际连接端口25上的“plaintext”(或者用于smtp auth连接的587),但是发送 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

答案 1 :(得分:0)

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