回复多部分电子邮件
问题描述:
我想添加文本到电子邮件的开头并将其发回。回复多部分电子邮件
如果这封信是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);
}
}
答
您需要将原始文本和回复文本到一个字符串和一个身体部位相结合,就像你在text/plain的情况下做到了。但是,您需要决定如何处理原始邮件中的其他部分。如果他们是附件,你想丢弃它们吗?如果原始邮件是multipart/alternative,您是否想更新回复中的text/html和text/plain部分?如果原件是多部分/相关的,是否要保留图片并更新回复中的文本/ html?还有很多情况需要考虑,甚至忽略签名或加密的消息。
谢谢你的回应。 这是我第一次使用邮件的经历。在那之前,我认为回复电子邮件是一件简单的事情)。 因此,我希望得到原始的信件,但要在第一行写上我的文字。附件忽略。 在JavaMail附带的例子中,我没有发现任何类似的东西。 您能展示一个这样的代码的例子吗? –