我有一个重写的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。感谢任何建议。