Java Mail API间歇性地失败

时间:2016-02-14 12:18:52

标签: java javamail

我使用java mail api创建了自动电子邮件报告,需要在批处理文件运行后每天触发。虽然它在大多数情况下都能正常工作,但有时会出现异常javax.mail.MessagingException:无法连接到SMTP host:我的主机名,端口:25;嵌套异常是:java.net.ConnectException:连接被拒绝。这不是由于身份验证问题,因为我在发送电子邮件时使用相同的凭据。

我不确定为什么java mail api会间歇性地失败。我可以得到一些调试问题的建议吗?

我正在使用以下代码段 -

  String to = "xyz@gmail.com";//change accordingly

  String from = "abc@mydomain.com";//change accordingly
  final String username = "abc";//change accordingly
  final String password = "*****";//change accordingly

  String host = "My SMTP server";

  Properties props = new Properties();
  props.put("mail.smtp.auth", "true");
  props.put("mail.smtp.starttls.enable", "true");
  props.put("mail.smtp.host", host);
  props.put("mail.smtp.port", "25");

  // Get the Session object.
  Session session = Session.getInstance(props,
  new javax.mail.Authenticator() {
     protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password);
     }
  });

  try {       
     Message message = new MimeMessage(session);
     message.setFrom(new InternetAddress(from));
     message.setRecipients(Message.RecipientType.TO,
     InternetAddress.parse(to));
     message.setSubject("Testing Subject");
     message.setText("message to stakeholders");
     Transport.send(message);
  }

2 个答案:

答案 0 :(得分:1)

检查邮件服务器上的日志以查看可能的拒绝原因是个好主意 - 特别是因为您知道什么时候失败尝试。

答案 1 :(得分:1)

如果JavaMail无法“有时”连接“拒绝连接”,则可能性为:

  1. 服务器实际上已关闭。
  2. 服务器已启动,但太忙,无法接受新连接。
  3. 服务器已启动,但由于某些政策原因拒绝连接,例如您连接频繁。
  4. 某些防火墙或防病毒程序拒绝了该连接。
  5. 检查服务器配置和日志文件。如果服务器上没有任何内容表明它拒绝连接,请检查客户端。