Java log4j自定义邮件附加器,用于发送带有文件附件的电子邮件

Java log4j自定义邮件附加器,用于发送带有文件附件的电子邮件,java,email,log4j,Java,Email,Log4j,我有一个覆盖的log4j SMTPAppender,负责发送带有文件附件的电子邮件 我有一个私有成员变量,它保存文件附件列表。在发送电子邮件之前,我设置了这个文件附件列表。这对于第一封电子邮件来说非常有效。电子邮件的格式很好,文件附在电子邮件上。但对于随后的电子邮件,附件显示为内联文本。在这里 这就是我随后的电子邮件的样子- 大宗报价 ---=_第2部分_694066731.1314069356582 2011年8月22日22:15:56 致命的 这是一封测试电子邮件,用于检查电子邮件是否有效。

我有一个覆盖的log4j SMTPAppender,负责发送带有文件附件的电子邮件

我有一个私有成员变量,它保存文件附件列表。在发送电子邮件之前,我设置了这个文件附件列表。这对于第一封电子邮件来说非常有效。电子邮件的格式很好,文件附在电子邮件上。但对于随后的电子邮件,附件显示为内联文本。在这里 这就是我随后的电子邮件的样子-

大宗报价 ---=_第2部分_694066731.1314069356582

2011年8月22日22:15:56 致命的

这是一封测试电子邮件,用于检查电子邮件是否有效。 ---=_第2部分_694066731.1314069356582 内容处置:附件;filename=Testing.zip

主键 大宗报价

这是我覆盖的sendBuffer-

  @Override 
    protected void sendBuffer() {
    try {
        Multipart mp = new MimeMultipart();                             
        MimeBodyPart messagePart = new MimeBodyPart();
        StringBuffer sbuf = new StringBuffer();
        String t = layout.getHeader();
        if (t != null)
            sbuf.append(t);
        int len = cb.length();
        for (int i = 0; i < len; i++) {
            LoggingEvent event = cb.get();
            sbuf.append(layout.format(event));
            if (layout.ignoresThrowable()) {
                String[] s = event.getThrowableStrRep();
                if (s != null) {
                    for (int j = 0; j < s.length; j++) {
                        sbuf.append(s[j]);
                        sbuf.append(Layout.LINE_SEP);
                    }
                }
            }
        }
        t = layout.getFooter();
        if (t != null)
        sbuf.append(t);
        messagePart.setContent(sbuf.toString(), layout.getContentType());
        messagePart.setDisposition(BodyPart.INLINE);
        mp.addBodyPart(messagePart);

        //For each attachment
        for (File file : fileAttachments) {
            // Part two is attachment
            MimeBodyPart attachmentPart = new MimeBodyPart();
            FileDataSource fileDataSource = new FileDataSource(file) {
                @Override
                public String getContentType() {
                    return "application/zip";
                }
            };

            attachmentPart.setDataHandler(new DataHandler(fileDataSource));
            attachmentPart.setFileName(file.getName());
            attachmentPart.setDisposition(BodyPart.ATTACHMENT);
            mp.addBodyPart(attachmentPart);

        }

        msg.setContent(mp);
        msg.setSentDate(new Date());
        msg.setSubject(getSubject());           
        send(msg);
    } catch (Exception e) {
        LogLog.error("Error occured while sending e-mail notification.", e);
    }
}

我在一个企业应用程序中使用logj,使用jboss作为应用服务器。感谢您的建议。

不确定,但您可以尝试断开SMTP会话的连接,并在其自己的会话中发送每封邮件。邮件是否与同一封邮件相连?谢谢,这很有效。在发送邮件之前,我会为每封邮件创建一个新会话。德穆苏鲁鲁:你能自己发布一个问题的答案,然后接受这个答案吗?此外,如果前面的问题解决了您的问题,您需要接受这些问题的答案。