public string Convert(String jobId, string pathToEml, string workingFolder) { Logger.DebugFormat("Coverting {0} in working folder {1}", pathToEml, workingFolder); var reader = new Reader(); var outFolder = Path.Combine(workingFolder, jobId); Logger.DebugFormat("Creating message working folder is {0}", outFolder); Directory.CreateDirectory(outFolder); Logger.Debug("Extracting files"); var files = reader.ExtractToFolder(pathToEml, outFolder); if (Logger.IsDebugEnabled) { foreach (var file in files) { Logger.DebugFormat("\t{0}", Path.GetFileName(file)); } Logger.DebugFormat("Total files {0}", files.Length); } var htmlFileName = files.FirstOrDefault(x => x.ToLowerInvariant().EndsWith(".htm")) ?? files.FirstOrDefault(x => x.ToLowerInvariant().EndsWith(".html")); if (htmlFileName == null) { var textFile = files.FirstOrDefault(x => x.ToLowerInvariant().EndsWith(".txt")); if (textFile != null) { htmlFileName = textFile + ".html"; var textcontent = File.ReadAllText(textFile); File.WriteAllText(htmlFileName, String.Format("<html><body><pre>{0}</html></body></pre>", textcontent)); } else { htmlFileName = "contentmissing.html"; File.WriteAllText(htmlFileName, "<html>No content found in mail.</html>"); } } var htmlNameWithoutExtension = Path.GetFileNameWithoutExtension(htmlFileName); var htmlContent = File.ReadAllText(htmlFileName); var dirInfoFullName = new DirectoryInfo(outFolder).FullName; htmlContent = Regex.Replace( htmlContent, @"src=""(?<src>.+?)""", new MatchEvaluator((m) => NormalizeImgEvaluator(m, dirInfoFullName)), RegexOptions.IgnoreCase); File.WriteAllText(htmlFileName, htmlContent); var pathToZip = Path.Combine(workingFolder, htmlNameWithoutExtension + ".ezip"); Logger.DebugFormat("New zip file is {0}", pathToZip); if (File.Exists(pathToZip)) { Logger.DebugFormat("Deleting previous file: {0}", pathToZip); File.Delete(pathToZip); } Logger.DebugFormat("Creating new file: {0}", pathToZip); ZipFile.CreateFromDirectory(outFolder, pathToZip); Logger.DebugFormat("Deleting message working folder", outFolder); Directory.Delete(outFolder, true); Logger.DebugFormat( "Convesion done {0} => {1}", pathToEml, pathToZip ); return pathToZip; }
/// <summary> /// Opens the selected MSG of EML file /// </summary> /// <param name="fileName"></param> private void OpenFile(string fileName) { // Open the selected file to read. string tempFolder = null; try { tempFolder = GetTemporaryFolder(); _tempFolders.Add(tempFolder); var msgReader = new Reader(); var files = msgReader.ExtractToFolder(fileName, tempFolder, genereateHyperlinksToolStripMenuItem.Checked); var error = msgReader.GetErrorMessage(); if (!string.IsNullOrEmpty(error)) throw new Exception(error); if (!string.IsNullOrEmpty(files[0])) webBrowser1.Navigate(files[0]); FilesListBox.Items.Clear(); foreach (var file in files) FilesListBox.Items.Add(file); } catch (Exception ex) { if (tempFolder != null && Directory.Exists(tempFolder)) Directory.Delete(tempFolder, true); MessageBox.Show(ex.Message); } }