需要更详细的日志记录——MimeMessage 和 SMTP 邮件
More detailed logging needed -- MimeMessage and SMTP Mail
我有以下功能,可以向某些收件人发送电子邮件。
从我的本地机器测试功能没问题。现在我已经将该功能实现为批处理作业的一部分。
日志记录表明 MimeMessage message = new MimeMessage(session);
可能存在问题。
我的日志文件中的最后一行是 INFO: Generate Session with Mail-Server.
我需要的是一些想法,如何增强日志记录并找到函数在构造函数处结束的原因。
我已经尝试 运行 服务器终端中的功能,但结果相同。函数在 MimeMessage 构造函数处终止的信息滞后有点令人担忧。
public static void sendErrorMail(Properties prop, Logger logger) throws IOException {
// Get the session object
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", prop.getProperty("addo.host"));
logger.info("Mail Host set to: " + prop.getProperty("addo.host"));
Session session = Session.getDefaultInstance(properties);
logger.info("Try generating and sending Mail.");
// compose the message
try {
logger.info("Generate Session with Mail-Server.");
MimeMessage message = new MimeMessage(session);
logger.info("MimeMessage - consruction success.");
message.setFrom(new InternetAddress(prop.getProperty("addo.mailFROM")));
logger.info("Mail send FROM set to = " + prop.getProperty("addo.mailFROM"));
message.addRecipients(RecipientType.TO, InternetAddress.parse(prop.getProperty("addo.mailTO")));
logger.info("Mail send TO set to = " + prop.getProperty("addo.mailTO"));
message.setSubject(prop.getProperty("addo.mailSubject"));
logger.info("Mail subject set to " + prop.getProperty("addo.mailSubject"));
message.setText(prop.getProperty("addo.mailText"));
logger.info("Mail text set to = " + prop.getProperty("addo.mailText"));
// Send message
Transport.send(message);
} catch (MessagingException mex) {
logger.warning("Send Mail failed! Inform Business User manually.");
mex.printStackTrace();
progExit(prop, false);
}
}
为 java.util.ServiceConfigurationError 和 java.lang.RuntimeException 添加到现有的 try 块额外的 catch 块。如果您看到 ServiceConfigurationError,那么要么需要更改上下文类加载器,要么批处理服务器有错误的 JavaMail 工件,例如 API 没有方法主体的 JavaMail 唯一版本。
您也可以开启mail debugging。这是一个包含两个更改的示例,但一次只应用一个更改并独立测试每个更改。
public static void sendErrorMail(Properties prop, Logger logger) throws IOException {
// Get the session object
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", prop.getProperty("addo.host"));
logger.info("Mail Host set to: " + prop.getProperty("addo.host"));
Session session = Session.getDefaultInstance(properties);
logger.info("Try generating and sending Mail.");
// compose the message
ClassLoader cce = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(Session.class.getClassLoader());
try {
logger.info("Generate Session with Mail-Server.");
MimeMessage message = new MimeMessage(session);
logger.info("MimeMessage - consruction success.");
message.setFrom(new InternetAddress(prop.getProperty("addo.mailFROM")));
logger.info("Mail send FROM set to = " + prop.getProperty("addo.mailFROM"));
message.addRecipients(RecipientType.TO, InternetAddress.parse(prop.getProperty("addo.mailTO")));
logger.info("Mail send TO set to = " + prop.getProperty("addo.mailTO"));
message.setSubject(prop.getProperty("addo.mailSubject"));
logger.info("Mail subject set to " + prop.getProperty("addo.mailSubject"));
message.setText(prop.getProperty("addo.mailText"));
logger.info("Mail text set to = " + prop.getProperty("addo.mailText"));
// Send message
Transport.send(message);
} catch (MessagingException | RuntimeException | ServiceConfigurationError mex) {
logger.warning("Send Mail failed! Inform Business User manually.");
mex.printStackTrace();
progExit(prop, false);
} finally {
Thread.currentThread().setContextClassLoader(cce);
}
}
我有以下功能,可以向某些收件人发送电子邮件。
从我的本地机器测试功能没问题。现在我已经将该功能实现为批处理作业的一部分。
日志记录表明 MimeMessage message = new MimeMessage(session);
可能存在问题。
我的日志文件中的最后一行是 INFO: Generate Session with Mail-Server.
我需要的是一些想法,如何增强日志记录并找到函数在构造函数处结束的原因。
我已经尝试 运行 服务器终端中的功能,但结果相同。函数在 MimeMessage 构造函数处终止的信息滞后有点令人担忧。
public static void sendErrorMail(Properties prop, Logger logger) throws IOException {
// Get the session object
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", prop.getProperty("addo.host"));
logger.info("Mail Host set to: " + prop.getProperty("addo.host"));
Session session = Session.getDefaultInstance(properties);
logger.info("Try generating and sending Mail.");
// compose the message
try {
logger.info("Generate Session with Mail-Server.");
MimeMessage message = new MimeMessage(session);
logger.info("MimeMessage - consruction success.");
message.setFrom(new InternetAddress(prop.getProperty("addo.mailFROM")));
logger.info("Mail send FROM set to = " + prop.getProperty("addo.mailFROM"));
message.addRecipients(RecipientType.TO, InternetAddress.parse(prop.getProperty("addo.mailTO")));
logger.info("Mail send TO set to = " + prop.getProperty("addo.mailTO"));
message.setSubject(prop.getProperty("addo.mailSubject"));
logger.info("Mail subject set to " + prop.getProperty("addo.mailSubject"));
message.setText(prop.getProperty("addo.mailText"));
logger.info("Mail text set to = " + prop.getProperty("addo.mailText"));
// Send message
Transport.send(message);
} catch (MessagingException mex) {
logger.warning("Send Mail failed! Inform Business User manually.");
mex.printStackTrace();
progExit(prop, false);
}
}
为 java.util.ServiceConfigurationError 和 java.lang.RuntimeException 添加到现有的 try 块额外的 catch 块。如果您看到 ServiceConfigurationError,那么要么需要更改上下文类加载器,要么批处理服务器有错误的 JavaMail 工件,例如 API 没有方法主体的 JavaMail 唯一版本。
您也可以开启mail debugging。这是一个包含两个更改的示例,但一次只应用一个更改并独立测试每个更改。
public static void sendErrorMail(Properties prop, Logger logger) throws IOException {
// Get the session object
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", prop.getProperty("addo.host"));
logger.info("Mail Host set to: " + prop.getProperty("addo.host"));
Session session = Session.getDefaultInstance(properties);
logger.info("Try generating and sending Mail.");
// compose the message
ClassLoader cce = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(Session.class.getClassLoader());
try {
logger.info("Generate Session with Mail-Server.");
MimeMessage message = new MimeMessage(session);
logger.info("MimeMessage - consruction success.");
message.setFrom(new InternetAddress(prop.getProperty("addo.mailFROM")));
logger.info("Mail send FROM set to = " + prop.getProperty("addo.mailFROM"));
message.addRecipients(RecipientType.TO, InternetAddress.parse(prop.getProperty("addo.mailTO")));
logger.info("Mail send TO set to = " + prop.getProperty("addo.mailTO"));
message.setSubject(prop.getProperty("addo.mailSubject"));
logger.info("Mail subject set to " + prop.getProperty("addo.mailSubject"));
message.setText(prop.getProperty("addo.mailText"));
logger.info("Mail text set to = " + prop.getProperty("addo.mailText"));
// Send message
Transport.send(message);
} catch (MessagingException | RuntimeException | ServiceConfigurationError mex) {
logger.warning("Send Mail failed! Inform Business User manually.");
mex.printStackTrace();
progExit(prop, false);
} finally {
Thread.currentThread().setContextClassLoader(cce);
}
}