javamail还提取封装消息的附件内容类型:message/rfc822

2024-03-10

我想提取封装在消息 InputStream 中的 .eml 消息的所有附件(内容类型:message/rfc822)

InputStream is = new FileInputStream(Path);
MimeMessage mime = new MimeMessage(null, is);



 private  String getAttachments(p) throws
                MessagingException, IOException {


if ( p.isMimeType("multipart/*")) {
                    Multipart multiPart = (Multipart) p.getContent();
                    int numberOfParts = multiPart.getCount();
                    for (int partCount = 0; partCount < numberOfParts; partCount++) {
MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(partCount);
String disp = part.getDisposition();
 if (disp != null && disp.equalsIgnoreCase(Part.ATTACHMENT)  {
    file_name =   part.getFileName();
    part.saveFile(Attachments_Folder + "\\" + MailFileName + "_" + file_name);
     }
     }
  }
}
is.close()

另外,当 Content-Type 为 message/rfc822 时,part.getFileName() 为 null,因此保存的文件没有扩展名,我不知道如何获取此扩展名。


我通过将新文件名作为 .eml 文件添加到包含的消息中并使用包含的消息进行递归来完成此操作

import java.util.*;
import javax.activation.DataHandler;
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.search.*;
import java.io.FileInputStream.*;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeBodyPart;
import javax.mail.Part;
import javax.mail.Multipart;

getAttachments(Path) ;
  //function
private  String getAttachments(path) throws
    MessagingException, IOException {
    InputStream is = new FileInputStream(path);
    MimeMessage p = new MimeMessage(null, is);

    if ( p.isMimeType("multipart/*")) {
// if (contentType.contains("multipart")) {
                    Multipart multiPart = (Multipart) p.getContent();
                    int numberOfParts = multiPart.getCount();
                    for (int partCount = 0; partCount < numberOfParts; partCount++) {
            MimeBodyPart part = (MimeBodyPart)multiPart.getBodyPart(partCount);
            String disp = part.getDisposition();

            if (disp != null && disp.equalsIgnoreCase(Part.ATTACHMENT)) {
            file_name =  part.contentType == "message/rfc822" ? "message_inclus" + partCount + ".eml" :             MimeUtility.decodeText(part.getFileName());
            exportedpath = Attachments_Folder + "/" + MailFileName + "_" + file_name; 
            part.saveFile(exportedpath);
            if ( part.contentType == "message/rfc822" ) {
            getAttachments(exportedpath) 
            }
            }
        }
    }
    is.close() 
    return 1
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javamail还提取封装消息的附件内容类型:message/rfc822 的相关文章

随机推荐