Comment convertir les fichiers EML et MSG en HTML en .NET

Comment convertir les fichiers EML et MSG en HTML en .NET

La conversion des fichiers électroniques au format HTML est essentielle pour les applications Web, les systèmes d’archivage de courriels et les solutions de gestion de documents modernes. HTML fournit un format polyvalent qui permet de voir facilement, de styler et d’intégrer le contenu de l’e-mail dans les Systèmes Web. L’Aspose.Email LowCode Converter simplifie ce processus, permettant aux développeurs de transformer EML et MSG Fichiers en HTML avec une complexité minimale de code.

Principaux

Avant de mettre en œuvre la conversion email-to-HTML, assurez-vous que votre environnement de développement comprend:

  • Visual Studio 2019 ou ultérieur (ou tout IDE .NET compatible)
  • .NET 6.0 SDK ou supérieur
  • Aspose.e-mail NuGet package
  • Connaissances de base de C# et de gestion des fichiers

Étape 1 : Installer Aspose.Email via NuGet

Installez le paquet Aspose.Email en utilisant l’une de ces méthodes:

Console de gestion d’emballage:

Install-Package Aspose.Email

Gestionnaire d’emballage:

  • Cliquez droit sur votre projet dans Solution Explorer
  • Sélectionnez « Gérer les paquets NuGet"
  • Rechercher pour “Aspose.e-mail”
  • Cliquez sur « Installer"

PackageRéférence dans .csproj:

<PackageReference Include="Aspose.Email" Version="24.3.0" />

Étape 2 : Écrire le code de conversion

Voici un exemple complet démontrant la conversion de fichier unique d’EML/MSG à HTML:

using Aspose.Email.LowCode;
using System;
using System.IO;
using System.Threading.Tasks;

namespace EmailToHtmlConverter
{
    class Program
    {
        static async Task Main(string[] args)
        {
            try
            {
                // Define input and output paths
                string inputFilePath = @"C:\Emails\sample.eml";
                string outputDirectory = @"C:\ConvertedEmails";
                
                // Create output directory if it doesn't exist
                Directory.CreateDirectory(outputDirectory);
                
                // Create input stream from the email file
                using var inputStream = File.OpenRead(inputFilePath);
                
                // Set up the output handler to save converted files
                var outputHandler = new FolderOutputHandler(outputDirectory);
                
                // Get the filename for processing
                string fileName = Path.GetFileName(inputFilePath);
                
                // Convert the email file to HTML
                await Converter.ConvertToHtml(inputStream, fileName, outputHandler);
                
                Console.WriteLine($"Successfully converted {fileName} to HTML format");
                Console.WriteLine($"Output saved to: {outputDirectory}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Conversion failed: {ex.Message}");
            }
        }
    }
}

Création de code:

  • Création de l’introduction du flux: File.OpenRead() Créer un flux de la source de fichier email
  • Sélectionner la configuration de l’exploitant: FolderOutputHandler gérer où les fichiers HTML convertis sont enregistrés
  • Exécution de la conversion: Converter.ConvertToHtml() Réaliser la transformation réelle
  • La gestion des ressources: using les déclarations assurent la bonne disposition des flux de fichiers

Étape 3 : Gérer les fichiers multiples (conversion batch)

Pour traiter plusieurs fichiers électroniques simultanément, mettre en œuvre la conversion batch:

using Aspose.Email.LowCode;
using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;

public class BatchEmailConverter
{
    public static async Task ConvertMultipleEmailsToHtml()
    {
        try
        {
            // Define directories
            string inputDirectory = @"C:\EmailFiles";
            string outputDirectory = @"C:\ConvertedEmails";
            
            // Create output directory
            Directory.CreateDirectory(outputDirectory);
            
            // Get all EML and MSG files from input directory
            var emailFiles = Directory.GetFiles(inputDirectory, "*.*")
                .Where(file => file.EndsWith(".eml", StringComparison.OrdinalIgnoreCase) || 
                              file.EndsWith(".msg", StringComparison.OrdinalIgnoreCase))
                .ToArray();
            
            Console.WriteLine($"Found {emailFiles.Length} email files to convert");
            
            // Set up output handler
            var outputHandler = new FolderOutputHandler(outputDirectory);
            
            // Process each file
            var conversionTasks = emailFiles.Select(async filePath =>
            {
                try
                {
                    using var inputStream = File.OpenRead(filePath);
                    string fileName = Path.GetFileName(filePath);
                    
                    await Converter.ConvertToHtml(inputStream, fileName, outputHandler);
                    
                    Console.WriteLine($"✓ Converted: {fileName}");
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"✗ Failed to convert {Path.GetFileName(filePath)}: {ex.Message}");
                }
            });
            
            // Execute all conversions concurrently
            await Task.WhenAll(conversionTasks);
            
            Console.WriteLine("Batch conversion completed!");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Batch conversion failed: {ex.Message}");
        }
    }
}

Thèmes avancés

Nom de sortie personnalisée

Créer un opérateur de sortie personnalisé pour contrôler le nom de fichier:

public class TimestampOutputHandler : IOutputHandler
{
    private readonly string _basePath;
    
    public TimestampOutputHandler(string basePath)
    {
        _basePath = basePath;
        Directory.CreateDirectory(_basePath);
    }
    
    public async Task AddOutputStream(string name, Func<Stream, Task> writeAction)
    {
        // Add timestamp prefix to the filename
        var timestamp = DateTime.Now.ToString("yyyyMMdd_HHmmss");
        var nameWithoutExtension = Path.GetFileNameWithoutExtension(name);
        var extension = ".html"; // Force HTML extension
        var newFileName = $"{timestamp}_{nameWithoutExtension}{extension}";
        var outputPath = Path.Combine(_basePath, newFileName);
        
        using var fileStream = File.Create(outputPath);
        await writeAction(fileStream);
        
        Console.WriteLine($"Created: {newFileName}");
    }
    
    public void AddOutputStream(string name, Action<Stream> writeAction)
    {
        // Synchronous version
        var timestamp = DateTime.Now.ToString("yyyyMMdd_HHmmss");
        var nameWithoutExtension = Path.GetFileNameWithoutExtension(name);
        var extension = ".html";
        var newFileName = $"{timestamp}_{nameWithoutExtension}{extension}";
        var outputPath = Path.Combine(_basePath, newFileName);
        
        using var fileStream = File.Create(outputPath);
        writeAction(fileStream);
    }
}

// Usage example:
var customHandler = new TimestampOutputHandler(@"C:\ConvertedEmails");
await Converter.ConvertToHtml(inputStream, fileName, customHandler);

Traitement complet des erreurs

Traitement d’erreur robuste pour les environnements de production:

public class RobustEmailConverter
{
    public static async Task<ConversionResult> ConvertEmailToHtml(string inputPath, string outputDirectory)
    {
        var result = new ConversionResult();
        
        try
        {
            // Validate input file exists
            if (!File.Exists(inputPath))
            {
                throw new FileNotFoundException($"Input file not found: {inputPath}");
            }
            
            // Validate file extension
            var extension = Path.GetExtension(inputPath).ToLower();
            if (extension != ".eml" && extension != ".msg")
            {
                throw new ArgumentException($"Unsupported file format: {extension}");
            }
            
            // Create output directory
            Directory.CreateDirectory(outputDirectory);
            
            // Perform conversion
            using var inputStream = File.OpenRead(inputPath);
            var outputHandler = new FolderOutputHandler(outputDirectory);
            string fileName = Path.GetFileName(inputPath);
            
            await Converter.ConvertToHtml(inputStream, fileName, outputHandler);
            
            result.Success = true;
            result.OutputPath = Path.Combine(outputDirectory, Path.ChangeExtension(fileName, ".html"));
            result.Message = "Conversion completed successfully";
        }
        catch (FileNotFoundException ex)
        {
            result.Success = false;
            result.ErrorType = "FileNotFound";
            result.Message = ex.Message;
        }
        catch (UnauthorizedAccessException ex)
        {
            result.Success = false;
            result.ErrorType = "AccessDenied";
            result.Message = $"Access denied: {ex.Message}";
        }
        catch (ArgumentException ex)
        {
            result.Success = false;
            result.ErrorType = "InvalidArgument";
            result.Message = ex.Message;
        }
        catch (Exception ex)
        {
            result.Success = false;
            result.ErrorType = "UnknownError";
            result.Message = $"Unexpected error: {ex.Message}";
        }
        
        return result;
    }
}

public class ConversionResult
{
    public bool Success { get; set; }
    public string Message { get; set; }
    public string ErrorType { get; set; }
    public string OutputPath { get; set; }
}

Conclusion

L’Aspose.Email LowCode Converter fournit une solution simplifiée pour la conversion des fichiers EML et MSG au format HTML:

  • API simplifié : code minimum requis pour les conversions complexes
  • Batch Processing : Traite efficacement plusieurs fichiers avec des opérations concurrentes
  • Résultat flexible : serveurs personnalisés pour les exigences spécialisées de nom et de stockage
  • Robust Error Handling : gestion complète des exceptions pour l’utilisation de la production
  • Support asynchronique : opérations non bloquées pour améliorer les performances des applications

Cette approche permet aux développeurs d’intégrer la conversion email-to-HTML sans cesse dans les applications Web, les systèmes de gestion des documents et les solutions d’archivage de l’e-mail. La sortie HTML maintient la formatisation originale du courrier électronique tout en fournissant la compatibilité avec les normes web modernes et des cadres de conception réactifs.

 Français