JavaMail base64 encoding

2019-07-04 06:38发布

I have some Java code which sends out an email with code somewhat like the following:

MimeBodyPart part = new MimeBodyPart();
part.setContent(htmlString, "text/html; charset=\"UTF-8\"");
part.setHeader("MIME-Version", "1.0");
part.setHeader("Content-Type", "text/html; charset=\"UTF-8\"");
part.setHeader("Importance", severityVal);

mimeMultiPart.addBodyPart(htmlPart);
mimeMessage.setContent(mimeMultiPart);

... and so on.

How can I encode the "part" MimeBodyPart in base64 for this outgoing email?

2条回答
女痞
2楼-- · 2019-07-04 07:14

From the docs:

Q: Even though JavaMail does all the encoding and decoding for me, I need to manually control the encoding for some body parts. A: In the rare case that you need to control the encoding, there are several ways to override JavaMail's default behavior. A simple approach is as follows. After creating the entire message, call msg.saveChanges() and then use something like mbp.setHeader("Content-Transfer-Encoding", "base64") to force base64 encoding for the given body part.

Another approach is to subclass MimeBodyPart and override the updateHeaders method so that it first calls super.updateHeaders() and then sets the Content-Transfer-Encoding header as above.

查看更多
戒情不戒烟
3楼-- · 2019-07-04 07:21

simply add this statement:

part.setHeader("Content-Transfer-Encoding", "base64");

after the lines of code that set part.setDataHandler(..) or part.setContent(...), and the dataSource/Handler will adapt itself to match the content transfer encoding you just specified for the body part.

You may also want to consider setting the headers by the same token, e.g.:

part.setHeader("Content-Type", "application/octet-stream");
查看更多
登录 后发表回答