在我们的系统中,我们保存了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);
}
}
显然更干净但我如何添加新的身体部位。我希望它在邮件的顶部,但不会覆盖原始邮件,这个解决方案就是这样做的。
答案 0 :(得分:-1)
JavaMail FAQ描述了forward a message的两种方式。
最简单的方法是创建新邮件并将原始邮件附加为附件。
如果您希望转发原始邮件&#34;内联&#34;,则需要根据原始邮件中的正文构建邮件的新正文。 JavaMail FAQ包含code for finding the main message body。使用附件等保留消息的原始结构要困难得多,尤其是当您考虑多部分/相关,多部分/替代等所有可能的情况时。
上述评论中描述的将新MimeBodyPart插入原始消息中的技术在某些情况下会起作用,但找出确切插入的位置仍然是一个挑战,最终结果可能不会显示为你我想。