Я отвечаю, чтобы опубликовать код моего решения:
// source is the encrypted MimeMessage
// MimeMessageWrapper is a wrapper which can copy a messgae but keep the message ID unchanged
boolean keepMessageId = true;
MimeMessageWrapper newMime = new MimeMessageWrapper(source, keepMessageId);
MimeMultipart mmp = new MimeMultipart("mixed");
List<MimePart> parts = MimeMultipartUtils.findPartsByMimeType(mime, "*");
for (MimePart part : parts) {
// Do some part processing
// Decrypt Adn verify individual parts
// End of processing
ContentType type = new ContentType(part.getContentType());
String encoding = part.getEncoding();
String name = type.getParameter("name");
part.setContent(new String(decPart.toByteArray()), type.toString());
// Add the part to the brand new MimeMultipart
mmp.addBodyPart((BodyPart) part);
}
// Set the original copy Message with the new modified content (decrypted parts)
mime.setContent(mmp);
mime.saveChanges();
На самом деле, похоже, нет другого способа изменить исходное сообщение, но мне достаточно было создать копию.Важным моментом было просто создать новый объект MimeMultipart, который будет содержать дешифрованные части и затем передан в качестве содержимого MimeMessage (Wrapper).Это сгенерирует новые значения типа контента «автоматически».
Для информации мы использовали MimeMessageWrapper, который является просто классом-оберткой, который позволяет сохранять идентификатор сообщения неизменным (или нет) для копий.Одна из возможных реализаций - проект Apache James .
Еще один важный момент: наконец, в этом решении базовые части были изменены, но граница также была адаптирована (больше не называется EncryptedXXXX), что даже чище для нашего случая.