回复多部分电子邮件

时间:2016-11-05 14:22:07

标签: java javamail

我想在电子邮件的开头添加文字并将其发回。

如果字母是MIME“text / plain”,则可以使用。 如果MIME“multipart / *”无法正常工作。发件人收到附件的回复,而不是原始回复。

如何在“multipart / *”电子邮件中添加文字并将其发送给发件人?

void replyMessage(String from, int MessageNumber, String MessageText) throws Exception {

    if (messages[MessageNumber].isMimeType("text/plain")) {

        // it work!
        Message msgReply = messages[MessageNumber].reply(false);
        String originalText = messages[MessageNumber].getContent().toString().replaceAll("(?m)^", "> ");

        msgReply.setFrom(new InternetAddress(from));
        msgReply.setText(MessageText + "\n\n---------------\n\n" + originalText);

        Transport.send(msgReply, user, pass);


    } else if (messages[MessageNumber].isMimeType("multipart/*")) {

        // not work!
        MimeMessage msgReply = (MimeMessage) messages[MessageNumber].reply(false);
        msgReply.setFrom(new InternetAddress(from));

        // Create your new message part
        BodyPart messageBodyPart1 = new MimeBodyPart();
        messageBodyPart1.setText("Oiginal message:\n\n");

        // Create and fill part for the forwarded content
        BodyPart messageBodyPart2 = new MimeBodyPart();
        messageBodyPart2.setDataHandler(messages[MessageNumber].getDataHandler());

        // Create a multi-part to combine the parts
        Multipart multipart = new MimeMultipart();

        // Add parts to multi part
        multipart.addBodyPart(messageBodyPart1);
        multipart.addBodyPart(messageBodyPart2);

        // add the Multipart to the message
        msgReply.setContent(multipart);

        Transport.send(msgReply, user, pass);
    }
}

1 个答案:

答案 0 :(得分:0)

您需要将原始文本和回复文本合并为单个字符串和单个正文部分,就像在text / plain情况下一样。但是,您需要决定如何处理原始邮件中的其他部分。如果他们是附件,你想丢弃它们吗?如果原始邮件是multipart / alternative,您是否要更新回复中的text / html和text / plain部分?如果原件是multipart / related,你想保留图片并更新回复中的text / html吗?还有更多需要考虑的案例,甚至忽略了签名或加密的消息。