需要使用log4j2 SMTP动态更改电子邮件收件人

时间:2016-11-15 12:16:18

标签: java email log4j2

我试图通过log4j2发送电子邮件。我需要在运行时更改电子邮件的收件人。

我可以使用以下代码通过代码设置:

ThreadContext.put(USER_EMAILS, "jhutc@company.com");

但是,如果我尝试使用以下方式进行设置:

<SMTP name="Mail" subject="MoLi Tests"
    to="%X{userEmails}" from="jhutc@company.com"
    smtpHost="mail.company.com" smtpPort="25" bufferSize="1">
    <ThresholdFilter level="INFO" onMatch="ACCEPT"
    onMismatch="DENY" />
    <PatternLayout pattern="%m %X{userEmails}"/>
</SMTP>

我得到以下异常:

  

2016-11-15 12:07:31,904主要错误发送电子邮件通知时出错。 com.sun.mail.smtp.SMTPSendFailedException:451 4.3.2请稍后再试

注意使用to="jhutc@company.com"工作正常,并证明userEmails变量已成功放入ThreadContext。

1 个答案:

答案 0 :(得分:0)

您可以在代码块中使用以下代码范围

public static void main(String ara[])
{

Logger LOGGER = LogManager.getLogger(xxx.class);

try
{
    Properties p = System.getProperties();
    p.setProperty("mail.smtp.starttls.enable", "true");

    ThreadContext.put("userEmails","to@gmail.com");

    LOGGER.log(LOG_LEVEL, "TEST"); // your choice level
    int a = 4 / 0;

} catch (Throwable e)
{

        LOGGER.log(LOG_LEVEL, "TEST");
    }