diff --git a/src/com/fsck/k9/mail/internet/BinaryTempFileBody.java b/src/com/fsck/k9/mail/internet/BinaryTempFileBody.java index edfae939c..244998a70 100644 --- a/src/com/fsck/k9/mail/internet/BinaryTempFileBody.java +++ b/src/com/fsck/k9/mail/internet/BinaryTempFileBody.java @@ -4,6 +4,8 @@ import com.fsck.k9.mail.Body; import com.fsck.k9.mail.MessagingException; import com.fsck.k9.mail.filter.Base64OutputStream; import org.apache.commons.io.IOUtils; +import org.apache.james.mime4j.codec.QuotedPrintableOutputStream; +import org.apache.james.mime4j.util.MimeUtil; import java.io.*; @@ -18,10 +20,16 @@ public class BinaryTempFileBody implements Body { private File mFile; + private String mEncoding = null; + public static void setTempDirectory(File tempDirectory) { mTempDirectory = tempDirectory; } + public void setEncoding(String encoding) { + mEncoding = encoding; + } + public BinaryTempFileBody() { if (mTempDirectory == null) { throw new @@ -44,13 +52,22 @@ public class BinaryTempFileBody implements Body { } public void writeTo(OutputStream out) throws IOException, MessagingException { + boolean closeStream = false; InputStream in = getInputStream(); + if (MimeUtil.isBase64Encoding(mEncoding)) { + out = (OutputStream) new Base64OutputStream(out); + closeStream = true; + } else if (MimeUtil.isQuotedPrintableEncoded(mEncoding)){ + out = new QuotedPrintableOutputStream(out, false); + closeStream = true; + } try { - Base64OutputStream base64Out = new Base64OutputStream(out); try { - IOUtils.copy(in, base64Out); + IOUtils.copy(in, out); } finally { - base64Out.close(); + if (closeStream) { + out.close(); + } } } finally { in.close(); diff --git a/src/com/fsck/k9/mail/internet/MimeUtility.java b/src/com/fsck/k9/mail/internet/MimeUtility.java index f231affb6..8605da2ea 100644 --- a/src/com/fsck/k9/mail/internet/MimeUtility.java +++ b/src/com/fsck/k9/mail/internet/MimeUtility.java @@ -1172,6 +1172,7 @@ public class MimeUtility { } BinaryTempFileBody tempBody = new BinaryTempFileBody(); + tempBody.setEncoding(contentTransferEncoding); OutputStream out = tempBody.getOutputStream(); try { IOUtils.copy(in, out);