log4j Custom Mail Appender для отправки писем с вложенными файлами - PullRequest
0 голосов
/ 23 августа 2011

У меня есть переопределенный log4j SMTPAppender, который отвечает за отправку писем с вложенными файлами.

У меня есть закрытая переменная-член, которая содержит список файловых вложений. И перед отправкой электронного письма я установил этот список вложенных файлов. Это прекрасно работает для первого письма. Письмо красиво отформатировано, а файлы прикреплены к письму. Но для последующих электронных писем вложение отображается в виде встроенного текста. Вот как выглядят мои последующие письма -

Blockquote ------ = _ Part_2_694066731.1314069356582

22 августа 2011 г. 22:15:56. FATAL

Это тестовое письмо, чтобы проверить, будет ли оно работать. ------ = _ Part_2_694066731.1314069356582 Содержание-Диспозиция: вложение; имя файла = Testing.zip

PK
Blockquote

Вот мой переопределенный 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 в качестве сервера приложений. Ценю любые предложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...