这实际上是一道考试题目,但我相信它可以帮助其他人解决类似的情况。
在一个系统中,需要将电子邮件发送到某个邮箱。以下 Java 代码是为此开发的,它是一个更大系统的一部分。假设“example.com”对应于一个有效的注册互联网域名。
public void sendEmail(){
String s1=”Warning”;
String b1=”Contact IT support.”;
String r1=”[email protected]”;
String d1=”[email protected]”;
String h1=”mx.intranet”;
Properties p1 = new Properties();
p1.put(“mail.host”, h1);
Session session = Session.getDefaultInstance(p1, null);
MimeMessage message = new MimeMessage(session);
try {
message.setFrom(new InternetAddress(r1));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(d1));
message.setSubject(s1);
message.setText(b1);
Transport.send(message);
}
catch (MessagingException e){
System.err.println(e);
}
}
在应用服务器的测试环境中执行此代码时,结果并不如预期。“example.com”服务器的邮箱从未收到电子邮件,尽管代码中的所有字符串值均已正确归因。
应用服务器中命令“netstat -np TCP”执行时的输出如下:
Src Add Src Port Dest Add Dest Port State
192.168.5.5 54395 192.168.7.1 25 SYN_SENT
192.168.5.5 54390 192.168.7.1 110 TIME_WAIT
192.168.5.5 52001 200.218.208.118 80 CLOSE_WAIT
192.168.5.5 52050 200.218.208.118 80 ESTABLISHED
192.168.5.5 50001 200.255.94.202 25 TIME_WAIT
192.168.5.5 50000 200.255.94.202 25 ESTABLISHED
除了经过 NAT 的线路之外,所有其他线路都与 Java 应用程序服务器相关联,该服务器在执行上述代码后创建了它们。
此环境中使用的电子邮件服务器是生产服务器,它处于在线状态并且不需要任何内部连接的身份验证。
根据该情况,指出导致该问题的三个可能原因。
答案1
我进行了如下尝试:
1 - 应用程序服务器 (192.168.5.5) 子网和内部邮件服务器 (192.168.7.1) 之间存在防火墙,阻止端口 25。
2 - 内部 DNS 服务器中“mx.intranet”的 DNS 条目配置不正确。它指向 192.168.7.1,而这不是 SMTP 服务器。
3 - 应用程序服务器的部署描述符配置为将 SMTP 连接重定向到错误的服务器(192.168.7.1 不是生产电子邮件服务器)。
这些看起来是合理的原因吗?
如果有人能发表评论,我将非常感激...:)