Java 邮件客户端无法在 Linux 上运行
Java Mail client not working on Linux
我有一个用于 zimbra 邮件服务器的电子邮件 ssl 客户端,可以在 windows 上完美运行,但我在 linux 上验证失败,我已经验证了所有网络配置。 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());
使用调试时引起我注意的是消息中的后缀响应
Windows调试日志:
DEBUG: setDebug: JavaMail version 1.4.3 DEBUG: getProvider() returning
javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun
Microsystems, Inc] DEBUG SMTP: useEhlo true, useAuth true DEBUG SMTP:
trying to connect to host "my.mail.server", port 465, isSSL true 220
my.mail.server ESMTP ready. DEBUG SMTP: connected to host
"my.mail.server", port: 465
同时在 Linux 我得到了这个:
DEBUG: setDebug: JavaMail version 1.4.3 DEBUG: getProvider() returning
javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun
Microsystems, Inc] DEBUG SMTP: useEhlo true, useAuth true DEBUG SMTP:
trying to connect to host "my.mail.server", port 465, isSSL true 220
my.mail.server ESMTP Postfix DEBUG SMTP: connected to host
"my.mail.server", port: 465
如果有任何帮助,我将不胜感激。
调试消息的差异不大。这只是两个(本地)邮件服务器在其 "connection greeting reply" 行中放置内容的外观差异。例如,Linux 服务器是 运行 Postfix as its MTA 通常会说:
220 smtp.example.com ESMTP Postfix
ESMTP spec 说:
"SMTP server implementations MAY include identification of their
software and version information in the connection greeting reply
after the 220 code, a practice that permits more efficient isolation
and repair of any problems. Implementations MAY make provision for
SMTP servers to disable the software and version announcement where
it causes security concerns."
真正的问题是别的。
如果我尝试对此进行调试,我会首先查看 MTA 日志,看看它们是否说明会话被关闭的原因。我还会检查用户/密码是否正确,以及 MTA 是否已适当配置以允许您尝试执行的操作。
我发现了问题,本地和外部访问的服务器身份验证不同,为了开发,我们在网络外使用 windows 服务器,在内部网使用 linux 服务器。
其实是邮件服务器配置错误
对于本地和 public 访问,java 邮件客户端现在保持不变。
我有一个用于 zimbra 邮件服务器的电子邮件 ssl 客户端,可以在 windows 上完美运行,但我在 linux 上验证失败,我已经验证了所有网络配置。 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());
使用调试时引起我注意的是消息中的后缀响应
Windows调试日志:
DEBUG: setDebug: JavaMail version 1.4.3 DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc] DEBUG SMTP: useEhlo true, useAuth true DEBUG SMTP: trying to connect to host "my.mail.server", port 465, isSSL true 220 my.mail.server ESMTP ready. DEBUG SMTP: connected to host "my.mail.server", port: 465
同时在 Linux 我得到了这个:
DEBUG: setDebug: JavaMail version 1.4.3 DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc] DEBUG SMTP: useEhlo true, useAuth true DEBUG SMTP: trying to connect to host "my.mail.server", port 465, isSSL true 220 my.mail.server ESMTP Postfix DEBUG SMTP: connected to host "my.mail.server", port: 465
如果有任何帮助,我将不胜感激。
调试消息的差异不大。这只是两个(本地)邮件服务器在其 "connection greeting reply" 行中放置内容的外观差异。例如,Linux 服务器是 运行 Postfix as its MTA 通常会说:
220 smtp.example.com ESMTP Postfix
ESMTP spec 说:
"SMTP server implementations MAY include identification of their software and version information in the connection greeting reply after the 220 code, a practice that permits more efficient isolation and repair of any problems. Implementations MAY make provision for SMTP servers to disable the software and version announcement where it causes security concerns."
真正的问题是别的。
如果我尝试对此进行调试,我会首先查看 MTA 日志,看看它们是否说明会话被关闭的原因。我还会检查用户/密码是否正确,以及 MTA 是否已适当配置以允许您尝试执行的操作。
我发现了问题,本地和外部访问的服务器身份验证不同,为了开发,我们在网络外使用 windows 服务器,在内部网使用 linux 服务器。
其实是邮件服务器配置错误
对于本地和 public 访问,java 邮件客户端现在保持不变。