我可以使用 javamail api 在 Outlook 中打开附加的电子邮件。但是当这个附加的电子邮件还包含一个 eml 作为附件时,我遇到了一个问题。
在 Outlook 中,如下图所示,主邮件(mail1 左侧)包含 mail2 作为附件,当打开 mail2 时,我们有 Re:completion 作为附件(右侧)。
在我的应用程序中,我在特定模板中显示 mail1 及其附件,当单击附件 mail2 时,我试图使用此代码使用 Outlook 打开它
try {
//in case mMail.getPart(iPart) is attachment
if (mMail.getPart(iPart).isMimeType("Message/*")) {
MimePart mimePart = mMail.getPart(iPart);
mMail = new Mail(); // class where we set the server and a new MimeMessage
mMail.setAllHeaders(mimePart); //we add all headers
mMail.addAllBodyParts(mimePart);// check below
sCD = mimePart.getDisposition();
sCT = mimePart.getContentType();
if(sCD.startsWith(Part.ATTACHMENT)){
String filename = mimePart.getFileName();
filename = MimeUtility.decodeText(filename);
sCD = Part.ATTACHMENT + ";filename=" + filename;
}
iPart = -1;
bMsg = true;
}
}
catch (Exception e) {
e.printStackTrace();
}
//这里继续打开邮件的代码
public void addAllBodyParts(Part part) throws Exception {
Object content = part.getContent();
if (content instanceof String) {
mmMsg.setContent(content, part.getContentType());
} else if (content instanceof Multipart) {
Multipart innerMultiPart = (Multipart) content;
int count = innerMultiPart.getCount();
for (int i = 0; i < count; i++) {
BodyPart innerBodyPart = innerMultiPart.getBodyPart(i);
String sCT = innerBodyPart.getContentType();
if (sCT != null) {
String disposition = innerBodyPart.getDisposition();
if (disposition != null && (disposition.equals(Part.ATTACHMENT))) {
Multipart multipart = new MimeMultipart();
//multipart.addBodyPart(innerBodyPart);
DataHandler handler = innerBodyPart.getDataHandler();
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setDataHandler(handler);
messageBodyPart.setFileName(innerBodyPart.getFileName());
messageBodyPart.setContent(innerBodyPart.getContent(), innerBodyPart.getContentType());
multipart.addBodyPart(messageBodyPart);
//innerMultiPart.addBodyPart(innerBodyPart);
mmMsg.setContent(multipart);
}else{
if(content instanceof MimeBodyPart){
MimeBodyPart mbp = (MimeBodyPart)content;
if (mbp.isMimeType("text/plain")) {
mmMsg.setContent(mbp.getContent(), sCT);
}
}else{
addAllBodyParts(innerBodyPart);
}
}
}else{
addAllBodyParts(innerBodyPart);
}
}
} else if (content instanceof MimeMessage){
MimeMessage msg = (MimeMessage) content;
addAllBodyParts(msg);
}
}
打开mail2时我得到以下信息:(左侧,正文为空,右侧,标题为空,正文中的文本错误)
任何人都可以帮助找出错误所在。谢谢