コード例 #1
0
        public void TwoMessagesOneInput()
        {
            var input =
                "From Not Header stuff\r\n more header \r\n\r\n body stuff \r\n\r\n more body \r\n" +
                "From Not Header again\r\n again more header \r\n\r\n again body stuff \r\n\r\n more body \r\n";

            EmailFileParser parser = new EmailFileParser();
            EmailMessage    message;
            EmailMessage    message2;

            //loop through until input = ""
            do
            {
                //just putting the input back in instead of using a remainder variable!
                message  = parser.ParseEmailMessage(input, out input);
                message2 = parser.ParseEmailMessage(input, out input);
            } while (input != "");

            Assert.Equal("Not Header stuff\r\n", message.From);
            Assert.Equal(" more header \r\n", message.Header);
            Assert.Equal(" body stuff \r\n\r\n more body \r\n", message.Body);

            Assert.Equal("Not Header again\r\n", message2.From);
            Assert.Equal(" again more header \r\n", message2.Header);
            Assert.Equal(" again body stuff \r\n\r\n more body \r\n", message2.Body);

            //remainder should be the next message (or everything else)
            //Assert.Equal("", input);
        }
コード例 #2
0
        public void TestAgainParseEmailLine()
        {
            var teststring = "From Something\r\n Some other stuff\r\n and all other stuff";

            var line = EmailFileParser.ParseLine(teststring, out var remainder);

            Assert.Equal("From Something\r\n", line);
            Assert.Equal(" Some other stuff\r\n and all other stuff", remainder);
        }
コード例 #3
0
        public void TestParseEmailLine()
        {
            var teststring = "From Some email address \r\n Some other stuff";

            var line = EmailFileParser.ParseLine(teststring, out var remainder);

            Assert.Equal("From Some email address \r\n", line);
            Assert.Equal(" Some other stuff", remainder);
        }
コード例 #4
0
        public void BeginMessageTest()
        {
            var input = "From Not Header stuff\r\n more header \r\n\r\n body stuff \r\n\r\n more body \r\n";

            EmailFileParser parser = new EmailFileParser();

            //Now that I'm using an out variable in ParseEmailMessage I need to use "out string remainder" again
            EmailMessage message = parser.ParseEmailMessage(input, out string remainder);

            Assert.Equal("Not Header stuff\r\n", message.From);
            Assert.Equal(" more header \r\n", message.Header);
            Assert.Equal(" body stuff \r\n\r\n more body \r\n", message.Body);
        }
コード例 #5
0
        public void OnePartialFromMessage()
        {
            //At the moment if you don't add a \r\n somewhere in the message then ParseEmailMessage
            //will not parse anything because ParseLine will be null
            var input = "From junk stuff no header no body just random junk\r\n other garbage";

            EmailFileParser parser  = new EmailFileParser();
            EmailMessage    message = parser.ParseEmailMessage(input, out input);

            Assert.Equal("junk stuff no header no body just random junk\r\n", message.From);
            Assert.Null(message.Header);
            Assert.Null(message.Body);
            Assert.Equal(" other garbage", input);
        }
コード例 #6
0
        public void OneMessageThenAPartialMessage()
        {
            var input =
                "From Not Header stuff\r\n more header \r\n\r\n body stuff \r\n\r\n more body \r\n" +
                "From Not Header again\r\n";

            EmailFileParser parser = new EmailFileParser();
            EmailMessage    message;
            EmailMessage    message2;

            message  = parser.ParseEmailMessage(input, out input);
            message2 = parser.ParseEmailMessage(input, out input);

            Assert.Equal("Not Header stuff\r\n", message.From);
            Assert.Equal(" more header \r\n", message.Header);
            Assert.Equal(" body stuff \r\n\r\n more body \r\n", message.Body);

            Assert.Equal("Not Header again\r\n", message2.From);
            Assert.Null(message2.Header);
            Assert.Null(message2.Body);
            Assert.Equal("", input);
        }
コード例 #7
0
        public void ThreeMessagesAndIncompleteMessageOneInput()
        {
            var input =
                "From Not Header stuff\r\n more header \r\n\r\n body stuff \r\n\r\n more body \r\n" +
                "From Not Header again\r\n again more header \r\n\r\n again body stuff \r\n\r\n more body \r\n" +
                "From Not Header thrice\r\n third more header \r\n\r\n third body stuff \r\n\r\n more body \r\n" +
                "From junk stuff no header no body just random junk";

            EmailFileParser parser = new EmailFileParser();
            EmailMessage    message;
            EmailMessage    message2;
            EmailMessage    message3;

            do
            {
                //just putting the input back in instead of using a remainder variable!
                message  = parser.ParseEmailMessage(input, out input);
                message2 = parser.ParseEmailMessage(input, out input);
                message3 = parser.ParseEmailMessage(input, out input);

                //this loop needs to be rethought some - the loop logic could go into the email parser
            } while (input != "From junk stuff no header no body just random junk");

            Assert.Equal("Not Header stuff\r\n", message.From);
            Assert.Equal(" more header \r\n", message.Header);
            Assert.Equal(" body stuff \r\n\r\n more body \r\n", message.Body);

            Assert.Equal("Not Header again\r\n", message2.From);
            Assert.Equal(" again more header \r\n", message2.Header);
            Assert.Equal(" again body stuff \r\n\r\n more body \r\n", message2.Body);

            Assert.Equal("Not Header thrice\r\n", message3.From);
            Assert.Equal(" third more header \r\n", message3.Header);
            Assert.Equal(" third body stuff \r\n\r\n more body \r\n", message3.Body);

            Assert.Equal("From junk stuff no header no body just random junk", input);
        }
コード例 #8
0
        static void Main(string[] args)
        {
            //spit out an error for empty args
            //would like to look at this further

            //var inputfile = FindDir("smallsample.txt");
            //Make a folder for data like this - take out of git
            var inputfile = args[0];

            EmailRenderer   renderer = new EmailRenderer();
            EmailFileParser parser   = new EmailFileParser();

            using (var file = new StreamReader(inputfile))
            {
                var input = file.ReadToEnd(); //solve later :)

                //save result to file
                var path = @".\outputhtml.html";

                if (File.Exists(@".\outputhtml.html")) // (File.Exists(path))?
                {
                    try
                    {
                        File.Delete(@".\outputhtml.html");
                    }
                    catch (System.IO.IOException e)
                    {
                        Console.WriteLine(e.Message);
                    }
                }

                while (!string.IsNullOrEmpty(input))
                {
                    var message = parser.ParseEmailMessage(input, out input);

                    //Console.WriteLine("---FROM -----------\n {0}", message.From);
                    //Console.WriteLine("---HEADER ---------\n {0}", message.Header);
                    //Console.WriteLine("---BODY -----------\n {0}", message.Body);

                    //render the html messages - might no longer be relevant
                    var result = renderer.Render(message);
                    File.AppendAllText(path, result);

                    //use the html agility pack
                    var htmldoc = new HtmlDocument();
                    htmldoc.LoadHtml(message.Body);

                    var htmlnodes = htmldoc.DocumentNode.SelectNodes("//body");

                    if (htmlnodes != null)
                    {
                        foreach (var node in htmlnodes)
                        {
                            Console.WriteLine(node.InnerText);
                            //Console.WriteLine(node.XPath);
                            //Console.WriteLine(node.InnerHtml);
                        }
                    }
                }
            }
        }