Fixed nested IMAP message encoding

This commit is contained in:
M66B 2022-03-12 23:49:33 +01:00
parent a99dd7cd17
commit 61d078f929
3 changed files with 17 additions and 3 deletions

View File

@ -294,7 +294,8 @@ public class IMAPBodyPart extends MimeBodyPart implements ReadableMime {
);
else if (bs.isNested() && message.isREV1() && bs.envelope != null)
dh = new DataHandler(
new IMAPNestedMessage(message,
new IMAPNestedMessage(message,
bs.encoding,
bs.bodies[0],
bs.envelope,
sectionId),

View File

@ -830,7 +830,8 @@ public class IMAPMessage extends MimeMessage implements ReadableMime {
* FETCH the components of nested messages
*/
dh = new DataHandler(
new IMAPNestedMessage(this,
new IMAPNestedMessage(this,
bs.encoding,
bs.bodies[0],
bs.envelope,
sectionId == null ? "1" : sectionId + ".1"),
@ -912,6 +913,11 @@ public class IMAPMessage extends MimeMessage implements ReadableMime {
return;
}
InputStream is = getMimeStream();
if (this instanceof IMAPNestedMessage) {
String encoding = getEncoding();
if (encoding != null)
is = MimeUtility.decode(is, encoding);
}
try {
// write out the bytes
byte[] bytes = new byte[16*1024];

View File

@ -29,6 +29,7 @@ import com.sun.mail.iap.ProtocolException;
public class IMAPNestedMessage extends IMAPMessage {
private IMAPMessage msg; // the enclosure of this nested message
private String encoding;
/**
* Package private constructor. <p>
@ -36,9 +37,10 @@ public class IMAPNestedMessage extends IMAPMessage {
* Note that nested messages have no containing folder, nor
* a message number.
*/
IMAPNestedMessage(IMAPMessage m, BODYSTRUCTURE b, ENVELOPE e, String sid) {
IMAPNestedMessage(IMAPMessage m, String enc, BODYSTRUCTURE b, ENVELOPE e, String sid) {
super(m._getSession());
msg = m;
encoding = enc;
bs = b;
envelope = e;
sectionId = sid;
@ -124,6 +126,11 @@ public class IMAPNestedMessage extends IMAPMessage {
return bs.size;
}
@Override
public String getEncoding() {
return encoding;
}
/*
* Disallow setting flags on nested messages
*/