JavaMail seems like a good solution. Create a MimeMessage
from your file, find the body parts whose content transfer encodings you want to change, call MimeBodyPart.setHeader("Content-Transfer-Encoding", "quoted-printable")
, and write the resulting message out via MimeMessage.writeTo()
.
Something along the lines of this:
Session session = Session.getInstance(new Properties());
MimeMessage mm = new MimeMessage(new FileInputStream(msgfile));
// assuming we know that it's a multipart; otherwise, check Content-Type first...
MimeMultipart multi = (MimeMultipart) mm.getContent();
for (int i = 0; i < multi.getCount(); i++) {
MimeBodyPart mbp = (MimeBodyPart) multi.getBodyPart(i);
mbp.setHeader("Content-Transfer-Encoding", "quoted-printable");
}
mm.saveChanges();
mm.writeTo(new FileOutputStream(outfile));
Note that MimeMessage
by default will reset the Message-ID
header when you've made changes to the message. If you don't want this, override MimeMessage.updateMessageID()
to a no-op.