如何使用log4j SMTP appender发送电子邮件

时间:2014-02-05 19:22:45

标签: java spring log4net

我想在完成java任务后只向电子邮件组发送一次电子邮件。

在log4j属性中,我可以发送电子邮件,但是每个日志语句都会触发电子邮件。

但我的要求是在所有任务完成后发送电子邮件,意味着启动java程序,进行一些处理,这将有多个日志语句,然后发送电子邮件。

下面是我的log4j smtp属性列表。

#log4j.rootLogger=DEBUG, sendMail  
#log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
#log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
#log4j.appender.stdout.layout.ConversionPattern=[%5p] %d{mm:ss} (%F:%M:%L)%n%m%n%n  
#log4j.appender.sendMail=org.apache.log4j.net.SMTPAppender  
##log4j.appender.sendMail.Threshold=WARN  
#log4j.appender.sendMail.To=xx@domain.com   
#log4j.appender.sendMail.From=xx@domain.com  
#log4j.appender.sendMail.SMTPHost=10.13.16.57
#log4j.appender.sendMail.Subject=Log4J Message  
#log4j.appender.sendMail.layout=org.apache.log4j.PatternLayout  
#log4j.appender.sendMail.layout.ConversionPattern=%p %t %c - %m%n  
#log4j.appender.sendMail.BufferSize=1  
#log4j.appender.sendMail.SMTPDebug=true 

2 个答案:

答案 0 :(得分:0)

在XML中定义log4j配置并添加一个logger元素以用作记录器名称。

请参阅log4j XML formatLog4j config

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
   <to value="to@domain.com" />
   <from value="from@domain.com" />
   <subject value="test logging message" />
   <smtpHost value="SMTPServer.domain.com" />
   <layout type="log4net.Layout.PatternLayout">
       <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
   </layout>
</appender>   
<logger name="sendMail" additivity="false">
   <level value="info" />
   <appender-ref ref="mailAppender" />
</logger>

在你的代码中:

private static Logger LOG_MAIL = Logger.getLogger("sendMail");

答案 1 :(得分:0)

由于您希望在批处理运行结束时发送一封电子邮件,因此最好将所有邮件聚合成某种大字符串,然后使用Spring的JavaMailSender发送一封电子邮件。

使用JavaMailSender发送电子邮件时可以找到various articles,但实质上您需要先在Spring配置中配置它的实例:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="mail_host"/>
    <property name="port" value="25"/>
    <property name="username" value="mail_username"/>
    <property name="password" value="mail_password"/>
    <property name="javaMailProperties">
        <props>
            <prop key="mail.smtp.auth">true</prop>
        </props>
    </property>
</bean>

然后在您的客户端(批处理作业或其他任何情况),您可以为JavaMailSender指定一个自动装配的字段:

@Autowired
private JavaMailSender mailSender;

然后它只是创建和发送消息的情况:

SimpleMailMessage message = new SimpleMailMessage();
message.setTo(to);
message.setSubject(subject);
message.setText(body); // Your aggregated messages
mailSender.send(message);

这是基础知识 - 但你会发现很多其他文章和文档在网络上更详细地讨论它。