【问题标题】:Open in outllok using javamail api an attached email containing email as attachment使用 javamail api 在 Outlook 中打开包含电子邮件作为附件的附加电子邮件
【发布时间】:2013-07-01 15:06:30
【问题描述】:

我可以使用 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时我得到以下信息:(左侧,正文为空,右侧,标题为空,正文中的文本错误)

任何人都可以帮助找出错误所在。 谢谢

【问题讨论】:

    标签: java jakarta-mail email-attachments


    【解决方案1】:

    我不太确定您要使用 addAllBodyParts 完成什么。您似乎只是在创建一条与原始消息具有相同内容的新消息。不清楚创建新消息后如何处理它,但为什么不直接使用原始(附件)消息对象?

    MimeMessage attachedMsg = (MimeMessage)mimePart.getContent();
    

    我不知道你如何告诉 Outlook 显示一条消息,但你可以使用 writeTo 方法将消息写入文件。

    【讨论】:

    • 感谢比尔的帮助,但我试过了,但没有用。我正在尝试打开包含附加邮件的附加邮件。在 addAllBodyPart 中,我试图设置主要味精的内容以及附加的邮件。我知道这段代码有问题。但是我在网上没有找到任何解决方案
    • 再说一次,我不知道你为什么认为你需要复制所有的邮件内容才能做你想做的事情。附加消息是否包含另一条附加消息无关紧要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 2019-06-05
    • 1970-01-01
    • 2013-06-13
    • 2015-03-29
    • 2016-11-30
    相关资源
    最近更新 更多