当前位置: 首页 > 知识库问答 >
问题:

JavaMail内容传输编码问题

邵星河
2023-03-14

我有一些Java代码,它发送一封电子邮件,代码类似如下:实际上,我从Httprequest param获得了Mimemessage,在该Mimemessage中,我将在现有的主体中附加一些内容。

如果消息是text/plain和text/html content-type,我设置的content-transfer编码就不适用于body。

基于此文档

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

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个答案

莫河
2023-03-14

你在另一篇文章中重复了这个问题的大部分,我在那里回答了一部分。

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

 类似资料:
  • 我使用javax邮件api在imap服务器上读取消息。我检查消息内容传输编码,因为如果有必要,我会进行mime解码。 最近,我遇到了一个问题:我的代码在消息上找不到任何内容传输编码。这怎么可能?

  • 我对RESTful API和处理MIME内容都是新手。我正在尝试编写一个应用程序,从Gmail邮箱中检索消息,以便进一步处理。 我使用Google Developers API reference作为工具来熟悉API。使用以下GMail API参考中的“尝试一下”特性 https://developers.google.com/gmail/api/v1/reference/users/messag

  • 我正在使用JavaMail 1.4.1(我已经升级到1.4.5版本,但有同样的问题)从一个电子邮件帐户读取消息,但我在内容编码方面有问题: 一些消息被正确读取,但其他消息由于编码不合适而具有奇怪的字符。我意识到它不适用于特定的内容类型。 如果content entType是以下任何一个,它都能很好地工作: > 文本/普通;charset=ISO-8859-1 charset="iso-8859-1

  • 我正在开发一个可以阅读的电子邮件查看器。eml文件并在浏览器控件中显示消息。我找到了代码片段,它可以显示7位和引用的可打印消息(内容传输编码:引用的可打印/内容传输编码:base64)。我需要的是解码8位消息。 我在谷歌上搜索了一个8位解码器,但找不到。我真的需要一个8位解码器吗?你知道一个好的解码器吗? 更新: 相关标题: 我的代码中的正文消息(字符串行): Outlook在现实世界中显示的内容

  • 我在上传文件时遇到JMeter问题。服务器是ApacheTomcat在比较浏览器和JMeter之间的POST数据时,我发现这一行在JMeter请求内容传输编码中是额外的:二进制的,在通过Fiddler捕获的浏览器请求中没有。 我甚至从Badboy将脚本录制并导出到JMeter,即使如此,我也无法找到解决方案。 有没有办法从JMeter请求中关闭它。或者是由于服务器端代码中的问题。 是否有人遇到过此

  • 目前,该电子邮件显示了有关MimeBodyPart的以下标题: 标题部分应显示以下内容: 下面是我如何尝试强制引用可打印的内容: 如何强制内容传输编码可引用打印?我正在连接我的gmail邮件服务器idk,如果这有什么区别的话。也许这个标题会被谷歌覆盖。