spring 如何使用log4j SMTP附加器发送电子邮件

gt0wga4j  于 2022-10-30  发布在  Spring
关注(0)|答案(2)|浏览(153)

我想在完成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
rta7y2nd

rta7y2nd1#

由于您希望在批处理运行结束时发送一封电子邮件,因此最好将所有消息聚合到某种大字符串中,然后使用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字段:

@Autowired
private JavaMailSender mailSender;

然后就可以创建和发送消息:

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

这是基础知识--但是您会在Web上找到大量其他文章和文档更详细地讨论它。

cgvd09ve

cgvd09ve2#

在XML中定义log4j配置,并添加一个logger元素作为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");

相关问题