我有一个电子邮件ssl客户端的zimbra邮件服务器,完美的Windows上工作,但我得到了一个失败的身份validation在Linux上,我已经validation,所有的networkingconfiguration。 DNS,端口和防火墙是正确的
会话属性:
props.put("mail.smtps.host", "my.mail.server"); props.put("mail.smtps.host", "my.mail.server"); props.put("mail.smtps.starttls.enable", "true"); props.put("mail.smtps.port", "465"); props.put("mail.smtps.auth", "true"); props.put("mail.smtps.ssl.trust", "my.mail.server");
获得会议:
Session session = Session.getDefaultInstance(props);
运输 :
Transport t = session.getTransport("smtps"); t.connect("user", "pass"); t.sendMessage(message, message.getAllRecipients());
使用debugging时引起了我的注意,是邮件中的后缀响应
Windowsdebugging日志:
debugging:setDebug:JavaMail版本1.4.3 DEBUG:getProvider()返回javax.mail.Provider [TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems,Inc] DEBUG SMTP:useEhlo true,useAuth true DEBUG SMTP :尝试连接到主机“my.mail.server”,端口465,isSSL true 220 my.mail.server ESMTP就绪 。 debuggingSMTP:连接到主机“my.mail.server”,端口:465
同时在Linux上我得到这个:
debugging:setDebug:JavaMail版本1.4.3 DEBUG:getProvider()返回javax.mail.Provider [TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems,Inc] DEBUG SMTP:useEhlo true,useAuth true DEBUG SMTP :尝试连接到主机“my.mail.server”,端口465,isSSL true 220 my.mail.server ESMTP Postfix DEBUG SMTP:连接到主机“my.mail.server”,端口:465
我将不胜感激任何帮助。
调试消息的差异并不显着。 这两个(本地)邮件服务器在“连接问候回复”行中放置的只是一个表面上的区别。 例如,运行Postfix作为其MTA的Linux服务器通常会说:
220 smtp.example.com ESMTP Postfix
ESMTP规范说:
“SMTP服务器实现可以在220代码之后的连接问候回复中包含他们的软件和版本信息的标识,这种做法允许更有效地隔离和修复任何问题。实现可以规定SMTP服务器禁用软件和版本通告在那里引起安全问题。“
真正的问题将是别的东西。
如果我试图调试这个,我会先看看MTA日志,看看他们是否说会话关闭的原因。 我也会检查用户/密码是否正确,并且MTA已经被正确配置,以允许你正在做的事情。
我发现这个问题,服务器认证是不同的本地和外部访问,为开发我们使用的是外部的Windows服务器和Linux服务器的内部网。
实际上,这是邮件服务器的配置错误
Java邮件客户端现在保持相同的本地和公共访问。