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