ContentEncoding GetFinalEncoding(MimePart part) { if ((Capabilities & SmtpCapabilities.BinaryMime) != 0) { // no need to re-encode... return(part.ContentTransferEncoding); } if ((Capabilities & SmtpCapabilities.EightBitMime) != 0) { switch (part.ContentTransferEncoding) { case ContentEncoding.Default: case ContentEncoding.Binary: break; default: // all other Content-Transfer-Encodings are safe to transmit... return(part.ContentTransferEncoding); } } switch (part.ContentTransferEncoding) { case ContentEncoding.EightBit: case ContentEncoding.Default: case ContentEncoding.Binary: break; default: // all other Content-Transfer-Encodings are safe to transmit... return(part.ContentTransferEncoding); } ContentEncoding encoding; if ((Capabilities & SmtpCapabilities.BinaryMime) != 0) { encoding = part.GetBestEncoding(EncodingConstraint.None); } else if ((Capabilities & SmtpCapabilities.EightBitMime) != 0) { encoding = part.GetBestEncoding(EncodingConstraint.EightBit); } else { encoding = part.GetBestEncoding(EncodingConstraint.SevenBit); } if (encoding == ContentEncoding.SevenBit) { return(encoding); } part.ContentTransferEncoding = encoding; return(encoding); }
public void TestPrepare() { using (var content = new MemoryStream(new byte[64], false)) { var part = new MimePart("application/octet-stream") { Content = new MimeContent(content) }; var encoding = part.GetBestEncoding(EncodingConstraint.SevenBit); Assert.AreEqual(ContentEncoding.Base64, encoding, "GetBestEncoding"); part.Prepare(EncodingConstraint.SevenBit); Assert.AreEqual(ContentEncoding.Base64, part.ContentTransferEncoding, "Prepare #1"); // now make sure that calling Prepare() again doesn't change anything part.Prepare(EncodingConstraint.SevenBit); Assert.AreEqual(ContentEncoding.Base64, part.ContentTransferEncoding, "Prepare #2"); part.ContentTransferEncoding = ContentEncoding.Binary; part.Prepare(EncodingConstraint.None); Assert.AreEqual(ContentEncoding.Binary, part.ContentTransferEncoding, "Prepare #3"); part.Prepare(EncodingConstraint.SevenBit); Assert.AreEqual(ContentEncoding.Base64, part.ContentTransferEncoding, "Prepare #4"); } }