Improve MIME & SMTP compliance on outbound messages

* Write MIME-Version: 1.0 in all outbound messages, not just those
  with multiparts.  This is required by RFC 2045.
* Unit tests

Bug: 1678296
Change-Id: Icf37d93b8b0150f490791792499865a60744adea
This commit is contained in:
Andrew Stadler 2010-04-07 21:46:15 -07:00
parent 59cf1d05c1
commit 6bcccf6284
3 changed files with 14 additions and 5 deletions

View File

@ -147,6 +147,7 @@ public class Rfc822Output {
writeAddressHeader(writer, "Bcc", message.mBcc);
}
writeAddressHeader(writer, "Reply-To", message.mReplyTo);
writeHeader(writer, "MIME-Version", "1.0");
// Analyze message and determine if we have multiparts
String text = buildBodyText(context, message, appendQuotedText);
@ -170,7 +171,6 @@ public class Rfc822Output {
}
} else {
// continue with multipart headers, then into multipart body
writeHeader(writer, "MIME-Version", "1.0");
multipartBoundary = "--_com.android.email_" + System.nanoTime();
// Move to the first attachment; this must succeed because multipart is true

View File

@ -151,6 +151,7 @@ public class Rfc822OutputTests extends ProviderTestCase2<EmailProvider> {
new org.apache.james.mime4j.message.Message(messageInputStream);
// Make sure its structure is correct
checkMimeVersion(mimeMessage);
assertFalse(mimeMessage.isMultipart());
assertEquals("text/plain", mimeMessage.getMimeType());
}
@ -184,6 +185,7 @@ public class Rfc822OutputTests extends ProviderTestCase2<EmailProvider> {
new org.apache.james.mime4j.message.Message(messageInputStream);
// Make sure its structure is correct
checkMimeVersion(mimeMessage);
assertTrue(mimeMessage.isMultipart());
Header header = mimeMessage.getHeader();
Field contentType = header.getField("content-type");
@ -226,6 +228,7 @@ public class Rfc822OutputTests extends ProviderTestCase2<EmailProvider> {
new org.apache.james.mime4j.message.Message(messageInputStream);
// Make sure its structure is correct
checkMimeVersion(mimeMessage);
assertTrue(mimeMessage.isMultipart());
Header header = mimeMessage.getHeader();
Field contentType = header.getField("content-type");
@ -240,4 +243,13 @@ public class Rfc822OutputTests extends ProviderTestCase2<EmailProvider> {
header = part.getHeader();
assertNotNull(header.getField("content-disposition"));
}
/**
* Confirm that the constructed message includes "MIME-VERSION: 1.0"
*/
private void checkMimeVersion(org.apache.james.mime4j.message.Message mimeMessage) {
Header header = mimeMessage.getHeader();
Field contentType = header.getField("MIME-VERSION");
assertTrue(contentType.getBody().equals("1.0"));
}
}

View File

@ -208,7 +208,6 @@ public class SmtpSenderUnitTests extends ProviderTestCase2<EmailProvider> {
attachment.save(mProviderContext);
expectSimpleMessage(mockTransport);
mockTransport.expect("MIME-Version: 1.0");
mockTransport.expect("Content-Type: multipart/mixed; boundary=\".*");
mockTransport.expect("");
mockTransport.expect("----.*");
@ -239,7 +238,6 @@ public class SmtpSenderUnitTests extends ProviderTestCase2<EmailProvider> {
attachment.save(mProviderContext);
expectSimpleMessage(mockTransport);
mockTransport.expect("MIME-Version: 1.0");
mockTransport.expect("Content-Type: multipart/mixed; boundary=\".*");
mockTransport.expect("");
mockTransport.expect("----.*");
@ -274,7 +272,6 @@ public class SmtpSenderUnitTests extends ProviderTestCase2<EmailProvider> {
attachment2.save(mProviderContext);
expectSimpleMessage(mockTransport);
mockTransport.expect("MIME-Version: 1.0");
mockTransport.expect("Content-Type: multipart/mixed; boundary=\".*");
mockTransport.expect("");
mockTransport.expect("----.*");
@ -313,7 +310,6 @@ public class SmtpSenderUnitTests extends ProviderTestCase2<EmailProvider> {
// prepare for the message traffic we'll see
expectSimpleMessage(mockTransport);
mockTransport.expect("MIME-Version: 1.0");
mockTransport.expect("Content-Type: multipart/mixed; boundary=\".*");
mockTransport.expect("");
mockTransport.expect("----.*");
@ -356,6 +352,7 @@ public class SmtpSenderUnitTests extends ProviderTestCase2<EmailProvider> {
mockTransport.expect("Message-ID: .*");
mockTransport.expect("From: Jones@Registry.Org");
mockTransport.expect("To: Smith@Registry.Org");
mockTransport.expect("MIME-Version: 1.0");
}
/**