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;
        }
Exemple #2
0
        /// <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);
            }
        }