Java 需要更详细的日志记录--mimessage和SMTP邮件
我有以下功能,将发送电子邮件给一些收件人。 我本地机器的功能测试正常。现在,我已经将该函数作为批处理作业的一部分实现了。 日志表明Java 需要更详细的日志记录--mimessage和SMTP邮件,java,smtp,jakarta-mail,Java,Smtp,Jakarta Mail,我有以下功能,将发送电子邮件给一些收件人。 我本地机器的功能测试正常。现在,我已经将该函数作为批处理作业的一部分实现了。 日志表明MimeMessage message=new MimeMessage(会话)可能有问题。 我的日志文件中的最后一行是INFO:Generate Session with Mail Server. 我需要的是一些如何增强日志记录的想法,并找到函数在构造函数结束的原因 我尝试在服务器的终端上运行该函数,但结果相同。函数为何终止于mimessage构造函数的信息滞后是一个
MimeMessage message=new MimeMessage(会话)可能有问题代码>。
我的日志文件中的最后一行是INFO:Generate Session with Mail Server.
我需要的是一些如何增强日志记录的想法,并找到函数在构造函数结束的原因
我尝试在服务器的终端上运行该函数,但结果相同。函数为何终止于mimessage构造函数的信息滞后是一个值得关注的问题
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.lang.RuntimeException的其他捕获块添加到现有的try块中。如果您看到ServiceConfigurationError,那么要么需要更改上下文类加载器,要么批处理服务器有错误的JavaMail工件,比如没有方法体的JavaMail的仅API版本
您也可以打开。下面是一个包含两个更改的示例,但一次只应用一个,并独立测试每个更改
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);
}
}
嗨,谢谢你的意见。我发现错误是由于缺少activation.jar造成的,这是因为服务器上的jdk版本更高。