Bagaimana untuk menukar fail e-mel EML dan MSG kepada HTML dalam .NET

Bagaimana untuk menukar fail e-mel EML dan MSG kepada HTML dalam .NET

Menukar fail e-mel kepada format HTML adalah penting untuk aplikasi berasaskan web, sistem penyimpanan email, dan penyelesaian pengurusan dokumen moden. HTML menyediakan format yang pelbagai yang membolehkan mudah melihat, styling dan integrasi kandungan email ke dalam sistem berpusat web. Aspose.Email LowCode Converter menyederhanakan proses ini, memungkinkan pemaju untuk mengubah Perbezaan EML dan MSG fail dalam HTML dengan kerumitan kod minimum.

Prerequisites

Sebelum melaksanakan penukaran e-mel kepada HTML, pastikan persekitaran pembangunan anda termasuk:

  • Visual Studio 2019 atau seterusnya (atau mana-mana IDE .NET yang kompatibel)
  • .NET 6.0 SDK atau lebih tinggi
  • Aspose.Email Pakej NuGet
  • Pengetahuan asas C# dan pengendalian fail

Langkah 1: Instal Aspose.Email melalui NuGet

Memasang pakej Aspose.Email menggunakan salah satu kaedah berikut:

Pengurus Pembungkusan Konsol:

Install-Package Aspose.Email

Pengurus Pembungkusan UI:

  • Klik kanan pada projek anda dalam Solution Explorer
  • Pilih “Pengurusan Pakej NuGet”
  • Mencari untuk “Aspose.Email”
  • Klik pada “Install"

PakaianRujukan dalam .csproj:

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

Langkah 2: Tuliskan kod penukaran

Berikut ialah contoh lengkap yang menunjukkan penukaran fail tunggal dari EML/MSG ke 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}");
            }
        }
    }
}

Perbezaan Kod:

  • Penciptaan Input Stream: File.OpenRead() mencipta aliran daripada fail e-mel sumber
  • Setup pengendali output: FolderOutputHandler menguruskan di mana fail HTML yang ditukar disimpan
  • Pelaksanaan pengubahsuaian: Converter.ConvertToHtml() Menjalankan transformasi sebenar
  • Pengurusan Sumber: using pernyataan memastikan penyelesaian yang betul aliran fail

Langkah 3: Mengendalikan pelbagai fail (Batch Conversion)

Untuk memproses beberapa fail e-mel pada masa yang sama, melaksanakan batch conversion:

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

Topik Lanjutan

Nama output tersuai

Mencipta pengendali output tersuai untuk mengawal nama fail:

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

Penyelesaian Kesilapan Komprehensif

Pelaksanaan pemprosesan ralat yang kukuh untuk persekitaran pengeluaran:

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

Aspose.Email LowCode Converter menyediakan penyelesaian yang lancar untuk menukar fail EML dan MSG kepada format HTML:

  • Simplified API : Kod minimum yang diperlukan untuk penukaran kompleks
  • Batch Processing : Mengendalikan pelbagai fail dengan cekap dengan operasi serentak
  • Keluaran fleksibel : Pengendali tersuai untuk keperluan nama dan penyimpanan khusus
  • Robust Error Handling : Pengurusan pengecualian komprehensif untuk penggunaan pengeluaran
  • Sokongan Asynchronous : Operasi bukan penghalang untuk prestasi aplikasi yang lebih baik

Pendekatan ini membolehkan pemaju untuk mengintegrasikan penukaran e-mel kepada HTML tanpa henti ke dalam aplikasi web, sistem pengurusan dokumen, dan penyelesaian arkib email. output HTML mengekalkan pemformatan email asal sambil menyediakan keserasian dengan piawaian web moden dan rangka kerja reka bentuk responsif.

 Melayu