2012-04-16 248 views
2

我工作的一个项目,在自动配置用户的电子邮件服务器设置。我从他的电子邮件地址提取邮件服务器,并使用DirContextcom.sun.jndi.dns.DnsContextFactory查找该邮件服务器的MX记录。如何测试安全的SMTP邮件服务邮件服务器

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

请帮助。

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

回答

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 
+0

多亏找到一个解决办法。我会检查一下。但gmail的smtp服务器是smtp.gmail.com,它使用端口465.那么它怎么会被弃用? – 2012-04-17 03:38:28

+0

许多提供商仍然提供SMTP-S以实现向后兼容。 gmail提供了smtp.gmail.com端口587上的STARTTLS以及 – Gryphius 2012-04-17 04:11:06

0

你有没有建立与服务器的连接之前认证的程序。每个远程邮件服务器都需要对试图建立套接字连接的机器进行身份验证。例如,如果使用javaMail库,则会给出用于添加用户名和密码的选项。您需要同时使用简单的插座中的Java

+0

这个答案会更好,带有一些工作代码。 – 2012-06-20 12:03:26