Java MimeMessage将文本添加到现有邮件

时间:2016-03-03 13:54:57

标签: java javamail

在我们的系统中,我们保存了mailmessages,以及我们可以转发这些消息的功能。 我知道希望能够在转发时将文本添加到邮件的顶部。 事实证明这是非常困难的。

部分代码。

private void addMessageStartOfMail(MimeMessage mail, String forwardMailBody) throws Exception{
    Object content = mail.getContent();     
    if (content.getClass().isAssignableFrom(MimeMultipart.class)) {
        MimeMultipart mimeMultipart = (MimeMultipart) content;
        for (int i = 0; i < mimeMultipart.getCount(); i++) {
            BodyPart bodyPart = mimeMultipart.getBodyPart(i);

             if (bodyPart.getContentType().startsWith("text/plain")) {
                 String cnt = forwardMailBody;
                  cnt = MailUtil.toPlainText(cnt);
                  cnt = cnt + (String)bodyPart.getContent();                     
                 bodyPart.setContent(cnt, bodyPart.getContentType());
             }
  ......

这有效,但不幸的是并非所有邮件都是文本/纯文本,有些是text / html,更糟糕的是,有些是多部分,这是一团糟。

故障代码

    }else if(bodyPart.getContentType().startsWith("multipart")) {
Multipart mp = (Multipart) bodyPart.getContent();
int count = mp.getCount();
for (int j = 0; j < count; j++) {
     BodyPart bp = mp.getBodyPart(j);                       
        if (bp.getContentType().startsWith("text/html")) {
            String cnt = form.getForwardMailBody();
            cnt = cnt + (String)bp.getContent();
            bp.setContent(cnt,  bp.getContentType());
            ....    

由于某种原因,这会将contenttype从html变为plain,这会使原始消息变得混乱。

我觉得必须有一个更明智的方法。 我可以以某种方式将一个简单的bodypart添加到Mimemessage或其他东西的开头。 有什么建议吗?

在VGR回答后,我做了一个新的尝试。

    private void addMessageStartOfMail(MimeMessage mail, String forwardMailBody) throws Exception{
    Object content = mail.getContent();     
    if (content.getClass().isAssignableFrom(MimeMultipart.class)) {
        MimeMultipart mimeMultipart = (MimeMultipart) content;
        BodyPart messageBodyPart = new MimeBodyPart();
        messageBodyPart.setText("Test");       
        mimeMultipart.addBodyPart(messageBodyPart, 0);
    }

}

显然更干净但我如何添加新的身体部位。我希望它在邮件的顶部,但不会覆盖原始邮件,这个解决方案就是这样做的。

1 个答案:

答案 0 :(得分:-1)

JavaMail FAQ描述了forward a message的两种方式。

最简单的方法是创建新邮件并将原始邮件附加为附件。

如果您希望转发原始邮件&#34;内联&#34;,则需要根据原始邮件中的正文构建邮件的新正文。 JavaMail FAQ包含code for finding the main message body。使用附件等保留消息的原始结构要困难得多,尤其是当您考虑多部分/相关,多部分/替代等所有可能的情况时。

上述评论中描述的将新MimeBodyPart插入原始消息中的技术在某些情况下会起作用,但找出确切插入的位置仍然是一个挑战,最终结果可能不会显示为你我想。