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); }
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); }
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); }
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); }
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); }
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); } } } } }