log4j Custom Mail Appender用于发送带有文件附件的电子邮件

时间:2011-08-23 03:52:10

标签: java email log4j

我有一个重写的log4j SMTPAppender,它负责发送带有文件附件的电子邮件。

我有一个私有成员变量,它包含文件附件列表。在发送电子邮件之前,我设置了这个文件附件列表。这适用于第一封电子邮件。电子邮件格式很好,文件附在电子邮件中。但对于后续电子邮件,附件显示为内嵌文本。这里 我的后续电子邮件看起来如何 -

  

块引用   ------ = _ Part_2_694066731.1314069356582

     

22-Aug-2011 22:15:56   致命

     

这是一封测试电子邮件,用于检查电子邮件是否有效。   ------ = _ Part_2_694066731.1314069356582   内容 - 处理:附件;文件名= Testing.zip

     

PK
  块引用

这是我重写的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);
    }
}

我在使用jboss作为应用程序服务器的企业应用程序中使用logj。感谢任何建议。

0 个答案:

没有答案