我想在完成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
答案 0 :(得分:0)
在XML中定义log4j配置并添加一个logger元素以用作记录器名称。
请参阅log4j XML format和Log4j 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);
这是基础知识 - 但你会发现很多其他文章和文档在网络上更详细地讨论它。