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
请帮忙
进一步信息:我没有创建邮件客户端。这是为了简化现有邮件客户端的邮件服务器设置
# 1 楼答案
SMTP-SSL(端口465)afaik已被弃用,因此,与其尝试连接到SSL套接字,不如在端口25(或587用于SMTP身份验证连接)上连接“明文”,但发送EHLO而不是HELO,并查看服务器是否支持STARTTLS来替换弃用的SMTP-SSL。客户端发送STARTTLS命令后,连接被加密,因此端口25本身并不是“不安全的”
# 2 楼答案
在与服务器建立连接之前,您是否验证了该程序。每个远程邮件服务器都需要对试图建立套接字连接的机器进行身份验证。例如,如果您使用javaMail库,您将获得添加用户名和密码的选项。在java中使用简单的套接字时,您需要找到一种解决方法