Java Logback SMTPAppender:使用JNDI时,在何处/如何指定“收件人/发件人”字段

Java Logback SMTPAppender:使用JNDI时,在何处/如何指定“收件人/发件人”字段,java,jndi,logback,smtpappender,Java,Jndi,Logback,Smtpappender,编辑:我真正想问的是:当配置为使用JNDI查找时,如何使用Logback的SMTPAppender来指定到和来自电子邮件地址?这应该是SMTPAppender的基本功能形式,如果它不支持此功能,SMTPAppender将无法使用JNDI查找 我定义了以下LogbackSMTPAppender: <appender name="logManager-smtpAppender" class="ch.qos.logback.classic.net.SMTPAppender"> &l

编辑:我真正想问的是:当配置为使用JNDI查找时,如何使用Logback的
SMTPAppender
来指定
来自
电子邮件地址?这应该是
SMTPAppender
的基本功能形式,如果它不支持此功能,
SMTPAppender
将无法使用JNDI查找

我定义了以下Logback
SMTPAppender

<appender name="logManager-smtpAppender" class="ch.qos.logback.classic.net.SMTPAppender">
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>WARN</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>NEUTRAL</onMismatch>
    </filter>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>

    <asynchronousSending>false</asynchronousSending>

    <sessionViaJNDI>true</sessionViaJNDI>
    <jndiLocation>java:comp/env/mail/Session-local</jndiLocation>

    <subject>%logger{20} - %m</subject>
    <layout class="ch.qos.logback.classic.html.HTMLLayout"/>
    <cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker">
        <bufferSize>25</bufferSize>
    </cyclicBufferTracker>
</appender>

但我仍然不知道应该在哪里/如何设置字段。有什么想法吗?提前谢谢

收件人和发件人地址与javamail不相关。javamail会话用于配置消息的传输方式,而不是单个消息的详细信息

在xml配置中设置“收件人”和“发件人”字段,行如中所示



. 对于weblogic,您可以像这样配置它。

这是一个已知的错误。SMTPAppender无法使用JNDI作为连接源,无法从1.0.13开始成功发送电子邮件(它已提前发布)。

谢谢@sbridges(+1),但即使在我定义
时,我也会收到相同的“错误消息”(空目标地址。正在中止电子邮件传输)…而且我正在部署到Tomcat,并在Tomcat的全局
conf/context.xml
中定义JNDI连接源。如果您在
context.xml
中指定了所有邮件会话凭据,但在logback.xml中指定了“收件人/发件人”地址,那么SMTPAppender就可以正常工作了?您在logback.xml中定义了“收件人”和“发件人”,在context.xml中定义了“凭据”,但在logback.xml中定义了“收件人”和“发件人”,而在context.xml中定义了“凭据”,则无法正常工作,以及获取“空目标地址。中止电子邮件传输”。如果在parseAddress()中放置断点,TopAtterLayoutList是否为空?它的价值是什么?
List<InternetAddress> destinationAddresses = parseAddress(lastEventObject);
if (destinationAddresses.isEmpty()) {
    addInfo("Empty destination address. Aborting email transmission");
    return;
}

private List<InternetAddress> parseAddress(E event) {
    int len = toPatternLayoutList.size();

    List<InternetAddress> iaList = new ArrayList<InternetAddress>();

    for (int i = 0; i < len; i++) {
        try {
            PatternLayoutBase<E> emailPL = toPatternLayoutList.get(i);
            String emailAdrr = emailPL.doLayout(event);
            if (emailAdrr == null || emailAdrr.length() == 0) {
                continue;
            }
            InternetAddress[] tmp = InternetAddress.parse(emailAdrr, true);
            iaList.addAll(Arrays.asList(tmp));
        } catch (AddressException e) {
            addError("Could not parse email address for [" +         toPatternLayoutList.get(i) + "] for event [" + event + "]", e);
            return iaList;
        }
    }
    return iaList;
}
<configuration>   
  <appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
    <smtpHost>ADDRESS-OF-YOUR-SMTP-HOST</smtpHost>
    <to>EMAIL-DESTINATION</to>
    <to>ANOTHER_EMAIL_DESTINATION</to> <!-- additional destinations are possible -->
    <from>SENDER-EMAIL</from>
    <subject>TESTING: %logger{20} - %m</subject>
    <layout class="ch.qos.logback.classic.PatternLayout">
      <pattern>%date %-5level %logger{35} - %message%n</pattern>
    </layout>       
  </appender>

  <root level="DEBUG">
    <appender-ref ref="EMAIL" />
  </root>  
</configuration>