编辑:我在这里真正要问的是:当配置为使用JNDI查找时,如何用Logback的to
指定from
和SMTPAppender
电子邮件地址?这应该是SMTPAppender
的基本功能形式,并且如果SMTPAppender
不支持JNDI查找,则它无法与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>
如您所见,我正在使用JNDI查找邮件服务器凭据。
运行时,我得到:
ch.qos.logback.classic.net.SMTPAppender [logManager-smtpAppender]中的15:50:06,857 | -INFO中止电子邮件传输
这使我意识到:在上面的
SMTPAppender
或context.xml
中,我没有指定收/发电子邮件地址。如何/在何处(示例,请!)指定这些?! 我检查了Logback的源代码,并从
SMTPAppenderBase.java
内部打印了此消息: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;
}
但是我仍然不知道应该在哪里/如何设置字段。有任何想法吗?提前致谢!
最佳答案
这是一个已知的错误。 SMTPAppender不能将JNDI用作连接源,并且无法成功发送1.0.13版(过早发布)的电子邮件。