diff --git a/k9mail-library/src/main/java/com/fsck/k9/mail/Message.java b/k9mail-library/src/main/java/com/fsck/k9/mail/Message.java index 46ff8302c..3f6e5515e 100644 --- a/k9mail-library/src/main/java/com/fsck/k9/mail/Message.java +++ b/k9mail-library/src/main/java/com/fsck/k9/mail/Message.java @@ -141,7 +141,7 @@ public abstract class Message implements Part, CompositeBody { public abstract void removeHeader(String name) throws MessagingException; @Override - public abstract void setBody(Body body) throws MessagingException; + public abstract void setBody(Body body); public abstract long getId(); diff --git a/k9mail-library/src/main/java/com/fsck/k9/mail/Part.java b/k9mail-library/src/main/java/com/fsck/k9/mail/Part.java index 492b2a171..6f0de20cd 100644 --- a/k9mail-library/src/main/java/com/fsck/k9/mail/Part.java +++ b/k9mail-library/src/main/java/com/fsck/k9/mail/Part.java @@ -27,7 +27,7 @@ public interface Part { String getMimeType() throws MessagingException; - void setBody(Body body) throws MessagingException; + void setBody(Body body); void writeTo(OutputStream out) throws IOException, MessagingException; diff --git a/k9mail-library/src/main/java/com/fsck/k9/mail/internet/MimeBodyPart.java b/k9mail-library/src/main/java/com/fsck/k9/mail/internet/MimeBodyPart.java index 801f1cbde..a39c9813b 100644 --- a/k9mail-library/src/main/java/com/fsck/k9/mail/internet/MimeBodyPart.java +++ b/k9mail-library/src/main/java/com/fsck/k9/mail/internet/MimeBodyPart.java @@ -72,7 +72,7 @@ public class MimeBodyPart extends BodyPart { } @Override - public void setBody(Body body) throws MessagingException { + public void setBody(Body body) { this.mBody = body; } diff --git a/k9mail-library/src/main/java/com/fsck/k9/mail/internet/MimeMessage.java b/k9mail-library/src/main/java/com/fsck/k9/mail/internet/MimeMessage.java index 4cf09460e..120756dba 100644 --- a/k9mail-library/src/main/java/com/fsck/k9/mail/internet/MimeMessage.java +++ b/k9mail-library/src/main/java/com/fsck/k9/mail/internet/MimeMessage.java @@ -394,7 +394,7 @@ public class MimeMessage extends Message { } @Override - public void setBody(Body body) throws MessagingException { + public void setBody(Body body) { this.mBody = body; } @@ -492,13 +492,11 @@ public class MimeMessage extends Message { stack.addFirst(MimeMessage.this); } else { expect(Part.class); - try { - MimeMessage m = new MimeMessage(); - ((Part)stack.peek()).setBody(m); - stack.addFirst(m); - } catch (MessagingException me) { - throw new Error(me); - } + Part part = (Part) stack.peek(); + + MimeMessage m = new MimeMessage(); + part.setBody(m); + stack.addFirst(m); } } @@ -548,7 +546,21 @@ public class MimeMessage extends Message { @Override public void endMultipart() { - stack.removeFirst(); + expect(Multipart.class); + Multipart multipart = (Multipart) stack.removeFirst(); + + boolean hasNoBodyParts = multipart.getCount() == 0; + boolean hasNoEpilogue = multipart.getEpilogue() == null; + if (hasNoBodyParts && hasNoEpilogue) { + /* + * The parser is calling startMultipart(), preamble(), and endMultipart() when all we have is + * headers of a "multipart/*" part. But there's really no point in keeping a Multipart body if all + * of the content is missing. + */ + expect(Part.class); + Part part = (Part) stack.peek(); + part.setBody(null); + } } @Override