JavaMail 应用程序不会将电子邮件发送到外部 SMTP 服务器

JavaMail 应用程序不会将电子邮件发送到外部 SMTP 服务器

这实际上是一道考试题目,但我相信它可以帮助其他人解决类似的情况。

在一个系统中,需要将电子邮件发送到某个邮箱。以下 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 不是生产电子邮件服务器)。

这些看起来是合理的原因吗?

如果有人能发表评论,我将非常感激...:)

相关内容