JavaMail 内容传输编码问题

Posted

技术标签:

【中文标题】JavaMail 内容传输编码问题【英文标题】:JavaMail content-transfer-encoding issue 【发布时间】:2013-10-29 13:02:04 【问题描述】:

我有一些 Java 代码会发送一封电子邮件,其中的代码类似于以下内容:实际上我从 Httprequest 参数中获得了 Mimemessage,并且在该 mimemessage 中我将向现有正文附加一些内容。

如果 Mimemessage 是 Multipart content-type ,我在发送消息时不会遇到任何问题。

如果消息是 text/plain 和 text/html 内容类型,我设置的内容传输编码没有应用于正文。

基于此docs

问:尽管 JavaMail 为我完成了所有的编码和解码,但我需要手动控制一些正文部分的编码。答:在极少数需要控制编码的情况下,有几种方法可以覆盖 JavaMail 的默认行为。一个简单的方法如下。创建整个消息后,调用 msg.saveChanges(),然后使用类似 mbp.setHeader("Content-Transfer-Encoding", "base64") 的方式强制对给定正文部分进行 base64 编码。

另一种方法是继承 MimeBodyPart 并覆盖 updateHeaders 方法,以便它首先调用 super.updateHeaders() 然后像上面一样设置 Content-Transfer-Encoding 标头。

也适用于上面。但这对我不起作用。

InputStream ins = request.getInputStream();
MimeMessage msg = new MimeMessage(session,ins);
msg.setContent("some non-Ascii content","text/plain; charset="UTF-8"");
//Tried setheader before saveChanges() method, also doesn't work for me
//msg.setHeader("Content-Transfer-Encoding","base64"); 
msg.saveChanges();
//Now tried based on above docs after saveChanges method, also doesn't work
msg.setHeader("Content-Transfer-Encoding","base64"); 

请帮忙解决这个问题。

【问题讨论】:

【参考方案1】:

你在other post 中重复了大部分这个问题,我在那里回答了一部分。

您最好在 http 请求中发送邮件消息的内容,然后根据该内容在服务器上创建一条新消息,而不是尝试将完整的 MIME 消息发送到您随后编辑的服务器.

【讨论】:

以上是关于JavaMail 内容传输编码问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 JavaMail 阅读电子邮件内容时出现编码问题

JavaMail 从字符串发送邮件附件 - 编码 UTF-8

HTTP 中的内容编码与传输编码

使用 javamail 解析 eps 附件

内容传输编码与传输编码与内容编码

Rails 何时响应“传输编码”与“内容长度”?