如何设置log4j以使用NTLM身份验证发送电子邮件?

时间:2012-09-07 15:07:57

标签: java log4j

有没有办法通过只允许基于NTLM的身份验证的交换服务器使用Java log4j发送电子邮件?

1 个答案:

答案 0 :(得分:0)

默认的appender仅依赖于SMTP身份验证,因此它不会单独使用它。您可以创建一个自定义的电子邮件appender,如here所述(仅链接到首先分享该想法的州,它不是我的)。它基本上创建了身份验证完成的appender

import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;

import org.apache.log4j.net.SMTPAppender;

/**
* @author DEV
*
*/
public class GmailAppender extends SMTPAppender {
private boolean startTLS = false;

@Override
protected Session createSession() {
Properties props = null;
try {
props = new Properties(System.getProperties());
} catch (SecurityException ex) {
props = new Properties();
}
String prefix = "mail.smtp";
if (this.getSMTPProtocol() != null) {
props.put("mail.transport.protocol", this.getSMTPProtocol());
prefix = "mail." + this.getSMTPProtocol();
}

if (this.getSMTPHost() != null)
props.put(prefix + ".host", this.getSMTPHost());
if (this.getSMTPPort() > 0)
props.put(prefix + ".port", String.valueOf(this.getSMTPPort()));
if (this.startTLS)
props.put("mail.smtp.starttls.enable", "true");

Authenticator auth = null;
if (this.getSMTPPassword() != null && this.getSMTPUsername() != null) {
props.put(prefix + ".auth", "true");
auth = new Authenticator() {
...

然后,在配置文件中,

#email appender
log4j.appender.mail=com.horri.GmailAppender
#defines how othen emails are send
log4j.appender.mail.BufferSize=1
log4j.appender.mail.SMTPHost=smtp.gmail.com
log4j.appender.mail.From=yourmail@servermail.com
log4j.appender.mail.To=yourmail@gmail.com
log4j.appender.mail.startTLS = true
log4j.appender.mail.SMTPUsername=yourgmailusername
log4j.appender.mail.SMTPPassword=yourgmailpasswd
log4j.appender.mail.Subject=Log ...
log4j.appender.mail.threshold=error
log4j.appender.mail.layout=org.apache.log4j.PatternLayout
log4j.appender.mail.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

**编辑:有时乐于助人与“懒惰支持”混在一起。因此,这是一个apache许可的NTLM auth实现。 http://code.google.com/p/ntlm-java/希望它运作正常。