上下文 我们要求在交换服务器中收到的邮件消息正文附加一些文本。为此,我们使用Java Mail API来读取邮件,附加文本并将其设置为bodypart并将其写为.eml文件。
当我们阅读邮件并将其保存到文件而不做任何修改时,原始邮件和字符完好无损,并在.eml文件中显示正常。 但是,当我们将文本附加到正文并写入时,某些字符不会出现。它们显示为“?” .eml文件中的字符。
以下是来自邮件的示例文字:
专案价格申请(申请编号:SQ-3303112,终端用户:桃园国际机场股份有限公司,经销商:华电联网股份有限公司)已经由代理商(精技电脑股份有限公司)代为重新提交通知< / p>
将自定义文字附加到正文后,输出如下所示
?案?格申? (申???:SQ-3303112,?端用?:桃?????股份有限公司,??商:????股份有限公司)已?由代理商(精技??股份有限公司) )代?重新提交通知
public void parseMultipart(Multipart mPart) throws Exception {
// Parse the Multipart to find the body
// Loop through all of the BodyPart's
for (int i = 0; i < mPart.getCount(); i++) {
// Grab the body part
BodyPart bp = mPart.getBodyPart(i);
// Grab the disposition for attachments
String disposition = bp.getDisposition();
// It's not an attachment
if (disposition == null && bp instanceof MimeBodyPart) {
MimeBodyPart mbp = (MimeBodyPart) bp;
// Check to see if we're in the screwy situation where
// the message text is buried in another Multipart
if (mbp.getContent() instanceof Multipart) {
// Use recursion to parse the sub-Multipart
parseMultipart((Multipart) mbp.getContent());
} else {
// Time to grab and edit the body
if (mbp.isMimeType("text/plain")) {
........
} else if (mbp.isMimeType("text/html")) {
// Grab the body containing the HTML version
String body = (String)mbp.getContent();
StringBuilder bf = new StringBuilder(body);
// Add our custom message to the HTML
bf.append("<html><head></head><body>[APPLICATION_ID=123456]</body></html>");
mbp.setContent(bf.toString(), mbp.getContentType());
_msg.saveChanges();
mbp.setHeader("Content-Transfer-Encoding", mbp.getEncoding());
break;
}
}
}
}
}
尝试了很多东西,比如将编码类型设置为UTF-8,base64等,似乎没什么用。有什么指针吗?