简体   繁体   English

JavaMail base64编码

[英]JavaMail base64 encoding

I have some Java code which sends out an email with code somewhat like the following: 我有一些Java代码发送一封电子邮件,其代码如下:

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? 如何在base64中为此传出电子邮件编码“part”MimeBodyPart?

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. 问:尽管JavaMail为我做了所有编码和解码,但我需要手动控制某些身体部位的编码。 A: In the rare case that you need to control the encoding, there are several ways to override JavaMail's default behavior. 答:在极少数情况下,您需要控制编码,有几种方法可以覆盖JavaMail的默认行为。 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. 创建整个消息后,调用msg.saveChanges()然后使用类似mbp.setHeader("Content-Transfer-Encoding", "base64")来强制给定正文部分的base64编码。

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. 另一种方法是子类化MimeBodyPart并覆盖updateHeaders方法,以便它首先调用super.updateHeaders() ,然后如上所述设置Content-Transfer-Encoding标头。

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. 设置part.setDataHandler(..)part.setContent(...)的代码行之后 ,dataSource / Handler将自我调整以匹配您刚为body部分指定的内容传输编码。

You may also want to consider setting the headers by the same token, eg: 您可能还需要考虑使用相同的标记设置标头,例如:

part.setHeader("Content-Type", "application/octet-stream");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM