问题:JavaMail邮件回复时,附带的原邮件被当成附件了
期望:原邮件在正文下方显示
实际效果:
代码:
@Test
void queryMailBySmailUiidAndReply() {
String smailUiid = "BECA4AEADA764AECBCC802F887A16B78-20240526-160203";
try(Store store = sessionImap.getStore()) {
store.connect(HOST_IMAP, EMAIL, PASSWORD);
Folder folder = store.getFolder(MailUtil.FOLDER_INBOX);
folder.open(Folder.READ_ONLY);
Message[] messages = folder.search(new SearchTerm() {
@Override
public boolean match(Message msg) {
return MailUtil.getSmailUiid(msg).equals(smailUiid);
}
});
for(Message message : messages) {
log.info("No.{}\t\tsmailUiid={}", message.getMessageNumber(), MailUtil.getSmailUiid(message));
MimeMessage replyMessage = new MimeMessage(sessionSmtp);
replyMessage.setReplyTo(message.getFrom());
replyMessage.setRecipients(Message.RecipientType.TO, message.getFrom());
replyMessage.setSubject(MailUtil.REPLY_PREFIX + message.getSubject());
replyMessage.setFrom(EMAIL);
// 将原始邮件写入字节数组输出流
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
message.writeTo(outputStream);
// 创建一个MimeBodyPart来存储原始邮件
MimeBodyPart originalPart = new MimeBodyPart();
// 使用ByteArrayDataSource创建DataHandler
DataHandler dataHandler = new DataHandler(new ByteArrayDataSource(outputStream.toByteArray(), "message/rfc822"));
originalPart.setDataHandler(dataHandler);
// 创建一个多部分容器,用于包含回复和原始邮件
MimeMultipart multipart = new MimeMultipart(MailUtil.SUBTYPE_MIXED);
multipart.addBodyPart(originalPart);
// 添加回复的文本部分
MimeBodyPart replyText = new MimeBodyPart();
replyText.setContent("这是我的<b>回复</b>...", "text/html;charset=UTF-8");
multipart.addBodyPart(replyText);
// 设置多部分内容为邮件内容
replyMessage.setContent(multipart);
Transport transport = sessionSmtp.getTransport();
transport.connect(HOST_SMTP, EMAIL, PASSWORD);
transport.sendMessage(replyMessage, replyMessage.getAllRecipients());
}
folder.close();
} catch (Exception ex) {
log.error("{}", ex);
}