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版本更高。