コード例 #1
0
        public void TestReassembleRfc2046Example()
        {
            var message0 = Load(Path.Combine(TestHelper.ProjectDir, "TestData", "partial", "rfc2046.0.eml"));
            var message1 = Load(Path.Combine(TestHelper.ProjectDir, "TestData", "partial", "rfc2046.1.eml"));
            var original = Load(Path.Combine(TestHelper.ProjectDir, "TestData", "partial", "rfc2046.eml"));

            Assert.IsNotNull(message0, "Failed to parse rfc2046.0.eml");
            Assert.IsNotNull(message1, "Failed to parse rfc2046.1.eml");

            Assert.IsTrue(message0.Body is MessagePartial, "The body of rfc2046.0.eml is not a message/partial");
            Assert.IsTrue(message1.Body is MessagePartial, "The body of rfc2046.1.eml is not a message/partial");

            var partials = new MessagePartial[] { (MessagePartial)message0.Body, (MessagePartial)message1.Body };

            Assert.Throws <ArgumentNullException> (() => MessagePartial.Join(null, message0, partials));
            Assert.Throws <ArgumentNullException> (() => MessagePartial.Join((MimeMessage)null, partials));
            Assert.Throws <ArgumentNullException> (() => MessagePartial.Join((ParserOptions)null, partials));
            Assert.Throws <ArgumentNullException> (() => MessagePartial.Join(null));
            var message = MessagePartial.Join(message0, partials);

            Assert.IsNotNull(message, "Failed to reconstruct the message");
            Assert.AreEqual("Audio mail", message.Subject, "Subjects do not match");
            Assert.IsTrue(message.Body.ContentType.IsMimeType("audio", "basic"), "Parsed message body is not audio/basic");

            AssertRawMessageStreams(original, message);
        }
コード例 #2
0
        public void TestReassemble()
        {
            var message1 = Load(Path.Combine("..", "..", "TestData", "partial", "message-partial.1.msg.txt"));
            var message2 = Load(Path.Combine("..", "..", "TestData", "partial", "message-partial.2.msg.txt"));

            Assert.IsNotNull(message1, "Failed to parse message-partial.1.msg");
            Assert.IsNotNull(message2, "Failed to parse message-partial.2.msg");

            Assert.IsTrue(message1.Body is MessagePartial, "The body of message-partial.1.msg is not a message/partial");
            Assert.IsTrue(message2.Body is MessagePartial, "The body of message-partial.2.msg is not a message/partial");

            var partials = new MessagePartial[] { (MessagePartial)message1.Body, (MessagePartial)message2.Body };

            Assert.Throws <ArgumentNullException> (() => MessagePartial.Join(null, partials));
            Assert.Throws <ArgumentNullException> (() => MessagePartial.Join(null));
            var message = MessagePartial.Join(partials);

            Assert.IsNotNull(message, "Failed to reconstruct the message");
            Assert.AreEqual("{15_3779; Victoria & Cherry}: suzeFan - 2377h003.jpg", message.Subject, "Subjects do not match");
            Assert.IsTrue(message.Body is Multipart, "Parsed message body is not a multipart");

            var multipart = (Multipart)message.Body;

            Assert.AreEqual(2, multipart.Count, "Multipart does not contain the expected number of parts");

            var part = multipart[1] as MimePart;

            Assert.IsNotNull(part, "Second part is null or not a MimePart");
            Assert.IsTrue(part.ContentType.IsMimeType("image", "jpeg"), "Attachment is not an image/jpeg");
            Assert.AreEqual("2377h003.jpg", part.FileName, "Attachment filename is not the expected value");
        }
コード例 #3
0
        public void TestReassemble()
        {
            var message0 = Load(Path.Combine("..", "..", "TestData", "partial", "message-partial.0.eml"));
            var message1 = Load(Path.Combine("..", "..", "TestData", "partial", "message-partial.1.eml"));
            var message2 = Load(Path.Combine("..", "..", "TestData", "partial", "message-partial.2.eml"));
            var original = Load(Path.Combine("..", "..", "TestData", "partial", "message-partial.eml"));

            Assert.IsNotNull(message0, "Failed to parse message-partial.0.eml");
            Assert.IsNotNull(message1, "Failed to parse message-partial.1.eml");
            Assert.IsNotNull(message2, "Failed to parse message-partial.2.eml");

            Assert.IsTrue(message0.Body is MessagePartial, "The body of message-partial.0.eml is not a message/partial");
            Assert.IsTrue(message1.Body is MessagePartial, "The body of message-partial.1.eml is not a message/partial");
            Assert.IsTrue(message2.Body is MessagePartial, "The body of message-partial.2.eml is not a message/partial");

            var partials = new MessagePartial[] { (MessagePartial)message0.Body, (MessagePartial)message1.Body, (MessagePartial)message2.Body };

            Assert.Throws <ArgumentNullException> (() => MessagePartial.Join(null, partials));
            Assert.Throws <ArgumentNullException> (() => MessagePartial.Join(null));
            var message = MessagePartial.Join(partials);

            Assert.IsNotNull(message, "Failed to reconstruct the message");
            Assert.AreEqual("Photo of a girl with feather earrings", message.Subject, "Subjects do not match");
            Assert.IsTrue(message.Body is Multipart, "Parsed message body is not a multipart");

            var multipart = (Multipart)message.Body;

            Assert.AreEqual(2, multipart.Count, "Multipart does not contain the expected number of parts");

            var part = multipart[1] as MimePart;

            Assert.IsNotNull(part, "Second part is null or not a MimePart");
            Assert.IsTrue(part.ContentType.IsMimeType("image", "jpeg"), "Attachment is not an image/jpeg");
            Assert.AreEqual("earrings.jpg", part.FileName, "Attachment filename is not the expected value");

            using (var stream = new MemoryStream()) {
                var options = FormatOptions.Default.Clone();
                options.NewLineFormat = NewLineFormat.Unix;

                original.WriteTo(options, stream);

                var bytes0 = new byte[stream.Position];
                Array.Copy(stream.GetBuffer(), 0, bytes0, 0, (int)stream.Position);

                stream.Position = 0;

                message.WriteTo(options, stream);

                var bytes1 = new byte[stream.Position];
                Array.Copy(stream.GetBuffer(), 0, bytes1, 0, (int)stream.Position);

                Assert.AreEqual(bytes0.Length, bytes1.Length, "bytes");

                for (int i = 0; i < bytes0.Length; i++)
                {
                    Assert.AreEqual(bytes0[i], bytes1[i], "bytes[{0}]", i);
                }
            }
        }
コード例 #4
0
        public void TestArgumentExceptions()
        {
            var message = new MimeMessage();

            Assert.Throws <ArgumentNullException> (() => new MessagePartial(null, 1, 5));
            Assert.Throws <ArgumentOutOfRangeException> (() => new MessagePartial("id", 0, 5));
            Assert.Throws <ArgumentOutOfRangeException> (() => new MessagePartial("id", 6, 5));
            Assert.Throws <ArgumentNullException> (() => new MessagePartial("id", 1, 5).Accept(null));

            Assert.Throws <ArgumentNullException> (() => MessagePartial.Split(null, 500).ToList());
            Assert.Throws <ArgumentOutOfRangeException> (() => MessagePartial.Split(message, 0).ToList());
        }
コード例 #5
0
        public void TestSplit()
        {
            var message1 = Load(Path.Combine("..", "..", "TestData", "partial", "message-partial.1.msg.txt"));
            var message2 = Load(Path.Combine("..", "..", "TestData", "partial", "message-partial.2.msg.txt"));
            var partials = new MessagePartial[] { (MessagePartial)message1.Body, (MessagePartial)message2.Body };
            var message  = MessagePartial.Join(partials);
            var split    = MessagePartial.Split(message, 1024 * 16).ToList();
            var parts    = new List <MessagePartial> ();

            Assert.AreEqual(10, split.Count, "Unexpected count");

            for (int i = 0; i < split.Count; i++)
            {
                parts.Add((MessagePartial)split[i].Body);

                Assert.AreEqual(10, parts[i].Total, "Total");
                Assert.AreEqual(i + 1, parts[i].Number, "Number");
            }

            var combined = MessagePartial.Join(parts);

            using (var stream = new MemoryStream()) {
                var options = FormatOptions.Default.Clone();
                options.NewLineFormat = NewLineFormat.Unix;

                message.WriteTo(options, stream);

                var bytes0 = new byte[stream.Position];
                Array.Copy(stream.GetBuffer(), 0, bytes0, 0, (int)stream.Position);

                stream.Position = 0;

                combined.WriteTo(options, stream);

                var bytes1 = new byte[stream.Position];
                Array.Copy(stream.GetBuffer(), 0, bytes1, 0, (int)stream.Position);

                Assert.AreEqual(bytes0.Length, bytes1.Length, "bytes");

                for (int i = 0; i < bytes0.Length; i++)
                {
                    Assert.AreEqual(bytes0[i], bytes1[i], "bytes[{0}]", i);
                }
            }
        }
コード例 #6
0
        public void TestSplit()
        {
            var message = Load(Path.Combine(TestHelper.ProjectDir, "TestData", "partial", "message-partial.eml"));
            var split   = MessagePartial.Split(message, 1024 * 16).ToList();
            var parts   = new List <MessagePartial> ();

            Assert.AreEqual(11, split.Count, "Unexpected count");

            for (int i = 0; i < split.Count; i++)
            {
                parts.Add((MessagePartial)split[i].Body);

                Assert.AreEqual(11, parts[i].Total, "Total");
                Assert.AreEqual(i + 1, parts[i].Number, "Number");
            }

            var combined = MessagePartial.Join(message, parts);

            AssertRawMessageStreams(message, combined);
        }
コード例 #7
0
        public void TestReassembleGirlOnTrainPhotoExample()
        {
            var message0 = Load(Path.Combine(TestHelper.ProjectDir, "TestData", "partial", "message-partial.0.eml"));
            var message1 = Load(Path.Combine(TestHelper.ProjectDir, "TestData", "partial", "message-partial.1.eml"));
            var message2 = Load(Path.Combine(TestHelper.ProjectDir, "TestData", "partial", "message-partial.2.eml"));
            var original = Load(Path.Combine(TestHelper.ProjectDir, "TestData", "partial", "message-partial.eml"));

            Assert.IsNotNull(message0, "Failed to parse message-partial.0.eml");
            Assert.IsNotNull(message1, "Failed to parse message-partial.1.eml");
            Assert.IsNotNull(message2, "Failed to parse message-partial.2.eml");

            Assert.IsTrue(message0.Body is MessagePartial, "The body of message-partial.0.eml is not a message/partial");
            Assert.IsTrue(message1.Body is MessagePartial, "The body of message-partial.1.eml is not a message/partial");
            Assert.IsTrue(message2.Body is MessagePartial, "The body of message-partial.2.eml is not a message/partial");

            var partials = new MessagePartial[] { (MessagePartial)message0.Body, (MessagePartial)message1.Body, (MessagePartial)message2.Body };

            Assert.Throws <ArgumentNullException> (() => MessagePartial.Join(null, message0, partials));
            Assert.Throws <ArgumentNullException> (() => MessagePartial.Join((MimeMessage)null, partials));
            Assert.Throws <ArgumentNullException> (() => MessagePartial.Join((ParserOptions)null, partials));
            Assert.Throws <ArgumentNullException> (() => MessagePartial.Join(null));
            var message = MessagePartial.Join(partials);

            Assert.IsNotNull(message, "Failed to reconstruct the message");
            Assert.AreEqual("Photo of a girl with feather earrings", message.Subject, "Subjects do not match");
            Assert.IsTrue(message.Body is Multipart, "Parsed message body is not a multipart");

            var multipart = (Multipart)message.Body;

            Assert.AreEqual(2, multipart.Count, "Multipart does not contain the expected number of parts");

            var part = multipart[1] as MimePart;

            Assert.IsNotNull(part, "Second part is null or not a MimePart");
            Assert.IsTrue(part.ContentType.IsMimeType("image", "jpeg"), "Attachment is not an image/jpeg");
            Assert.AreEqual("earrings.jpg", part.FileName, "Attachment filename is not the expected value");

            AssertRawMessageStreams(original, message);
        }
コード例 #8
0
 protected internal override void VisitMessagePartial(MessagePartial entity)
 {
     MessagePartial++;
     base.VisitMessagePartial(entity);
 }