在Java中将多字节字符设置为消息体

时间:2014-08-18 09:53:27

标签: javamail

上下文 我们要求在交换服务器中收到的邮件消息正文附加一些文本。为此,我们使用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等,似乎没什么用。有什么指针吗?

0 个答案:

没有答案