예제 #1
0
        public void TestQuotedPrintableDecode()
        {
            const string input    = "This is an ordinary text message in which my name (=ED=E5=EC=F9 =EF=E1 =E9=EC=E8=F4=F0)\nis in Hebrew (=FA=E9=F8=E1=F2).";
            const string expected = "This is an ordinary text message in which my name (םולש ןב ילטפנ)\nis in Hebrew (תירבע).";
            var          encoding = Encoding.GetEncoding("iso-8859-8");
            var          decoder  = new QuotedPrintableDecoder();
            var          output   = new byte[4096];
            string       actual;

            byte[] buf;
            int    n;

            Assert.AreEqual(ContentEncoding.QuotedPrintable, decoder.Encoding);

            buf    = Encoding.ASCII.GetBytes(input);
            n      = decoder.Decode(buf, 0, buf.Length, output);
            actual = encoding.GetString(output, 0, n);
            Assert.AreEqual(expected, actual);

            encoding = CharsetUtils.Latin1;

            for (int i = 0; i < qpEncodedPatterns.Length; i++)
            {
                decoder.Reset();
                buf    = encoding.GetBytes(qpEncodedPatterns[i]);
                n      = decoder.Decode(buf, 0, buf.Length, output);
                actual = encoding.GetString(output, 0, n);
                Assert.AreEqual(qpDecodedPatterns[i], actual, "Failed to decode qpEncodedPatterns[{0}]", i);
            }
        }
예제 #2
0
        public void DecodeStringTest()
        {
            string encodedText = MIMERTests.Strings.QuotedPrintableEncoded;
            string decodedText = Encoding.Default.GetString(m_Decoder.Decode(ref encodedText));

            StringAssert.IsMatch(MIMERTests.Strings.QuotedPrintableDecoded, decodedText);
        }
예제 #3
0
        static StringSegment DecodeBody(Message message)
        {
            StringSegment    innerMessageText = message.Body.SourceText;
            TransferEncoding encoding         = message.GetTransferEncoding();

            switch (encoding)
            {
            default:
                throw new MimeException(MimeError.TransferEncodingNotSupported);

            case TransferEncoding.SevenBit:
                break;     // Nothing to do

            case TransferEncoding.QuotedPrintable:
                string decodedText = QuotedPrintableDecoder.Decode(innerMessageText);
                innerMessageText = new StringSegment(decodedText);
                break;

            case TransferEncoding.Base64:
                byte[] bytes         = Convert.FromBase64String(innerMessageText.ToString());
                string textFromBytes = Encoding.ASCII.GetString(bytes);
                innerMessageText = new StringSegment(textFromBytes);
                break;
            }

            return(innerMessageText);
        }
예제 #4
0
        public void TestEmoji()
        {
            var expected  = "<html><body>&#128561;<br/></body></html>";
            var buffer    = Encoding.ASCII.GetBytes("=F0=9F=98=B1");
            var decoder   = new QuotedPrintableDecoder();
            var length    = decoder.EstimateOutputLength(buffer.Length);
            var decoded   = new byte[length];
            var n         = decoder.Decode(buffer, 0, buffer.Length, decoded);
            var emoji     = Encoding.UTF8.GetString(decoded, 0, n);
            var converter = new TextToHtml();
            var result    = converter.Convert(emoji);

            Assert.AreEqual(expected, result);
        }
예제 #5
0
        public void TestQuotedPrintableDecode()
        {
            const string input    = "This is an ordinary text message in which my name (=ED=E5=EC=F9 =EF=E1 =E9=EC=E8=F4=F0)\nis in Hebrew (=FA=E9=F8=E1=F2).";
            const string expected = "This is an ordinary text message in which my name (םולש ןב ילטפנ)\nis in Hebrew (תירבע).";
            var          encoding = Encoding.GetEncoding("iso-8859-8");
            var          decoder  = new QuotedPrintableDecoder();
            var          output   = new byte[4096];

            var buf    = Encoding.ASCII.GetBytes(input);
            int n      = decoder.Decode(buf, 0, buf.Length, output);
            var actual = encoding.GetString(output, 0, n);

            Assert.AreEqual(expected, actual);
        }
예제 #6
0
        public static Byte[] DecodeQuoted(String data)
        {
            Byte[] buffer = Encoding.ASCII.GetBytes(data);

            QuotedPrintableDecoder decoder = new QuotedPrintableDecoder();

            Byte[] output = new Byte[decoder.EstimateOutputLength(buffer.Length)];

            Int32 length = decoder.Decode(buffer, 0, buffer.Length, output);

            MemoryStream stream = new MemoryStream(output, 0, length);

            return(stream.ToArray());
        }
예제 #7
0
        public void TestQuotedPrintableDecodeInvalidSoftBreak()
        {
            const string input    = "This is an invalid=\rsoft break.";
            const string expected = "This is an invalid=\rsoft break.";
            var          decoder  = new QuotedPrintableDecoder();
            var          output   = new byte[1024];
            string       actual;

            byte[] buf;
            int    n;

            Assert.AreEqual(ContentEncoding.QuotedPrintable, decoder.Encoding);

            buf    = Encoding.ASCII.GetBytes(input);
            n      = decoder.Decode(buf, 0, buf.Length, output);
            actual = Encoding.ASCII.GetString(output, 0, n);
            Assert.AreEqual(expected, actual);
        }
예제 #8
0
        public void TestQuotedPrintableDecodePatterns()
        {
            var    decoder  = new QuotedPrintableDecoder();
            var    encoding = CharsetUtils.Latin1;
            var    output   = new byte[4096];
            string actual;

            byte[] buf;
            int    n;

            for (int i = 0; i < qpEncodedPatterns.Length; i++)
            {
                decoder.Reset();
                buf    = encoding.GetBytes(qpEncodedPatterns[i]);
                n      = decoder.Decode(buf, 0, buf.Length, output);
                actual = encoding.GetString(output, 0, n);
                Assert.AreEqual(qpDecodedPatterns[i], actual, "Failed to decode qpEncodedPatterns[{0}]", i);
            }
        }
예제 #9
0
        protected byte[] DecodeQuotedPrintable(string input)
        {
            try
            {
                QuotedPrintableDecoder encoder = new QuotedPrintableDecoder(false);

                byte[] inputBytes = Encoding.UTF8.GetBytes(input);

                byte[] outputBytes = new byte[encoder.EstimateOutputLength(inputBytes.Length)];

                int length = encoder.Decode(inputBytes, 0, inputBytes.Length, outputBytes);

                return(outputBytes.Take(length).ToArray());
            }
            catch
            {
                return(null);
            }
        }
예제 #10
0
        public void TestRoundTrip(int toCount, int ccCount, int bodyLength)
        {
            // Manually wrap the mail...
            MailMessage mail               = MailMessageGenerator.GenerateRandomMail(toCount, ccCount, bodyLength);
            MailMessage wrappedMessage     = MailMessageGenerator.WrappedMailMessage(mail);
            string      wrappedMessageText = wrappedMessage.Serialize();

            Message parsedMessage = null;

            Assert.DoesNotThrow(() => parsedMessage = Message.Load(wrappedMessageText));
            Message extracted = null;

            Assert.DoesNotThrow(() => extracted = WrappedMessage.ExtractInner(parsedMessage));

            string extractedBody = extracted.Body.Text;

            if (extracted.GetTransferEncoding() == TransferEncoding.QuotedPrintable)
            {
                extractedBody = QuotedPrintableDecoder.Decode(new StringSegment(extractedBody));
                extractedBody = extractedBody.TrimEnd();
            }
            Assert.True(extractedBody == mail.Body);
        }
예제 #11
0
        public void TestQuotedPrintableEncodeFlush()
        {
            const string input    = "This line ends with a space ";
            const string expected = "This line ends with a space=20=\n";
            var          encoder  = new QuotedPrintableEncoder();
            var          decoder  = new QuotedPrintableDecoder();
            var          output   = new byte[1024];
            string       actual;

            byte[] buf;
            int    n;

            Assert.AreEqual(ContentEncoding.QuotedPrintable, encoder.Encoding);

            buf    = Encoding.ASCII.GetBytes(input);
            n      = encoder.Flush(buf, 0, buf.Length, output);
            actual = Encoding.ASCII.GetString(output, 0, n);
            Assert.AreEqual(expected, actual);

            buf    = Encoding.ASCII.GetBytes(expected);
            n      = decoder.Decode(buf, 0, buf.Length, output);
            actual = Encoding.ASCII.GetString(output, 0, n);
            Assert.AreEqual(input, actual);
        }