Bagaimana untuk mengubah file email EML dan MSG ke HTML dalam .NET

Bagaimana untuk mengubah file email EML dan MSG ke HTML dalam .NET

Konversi file email ke format HTML adalah penting untuk aplikasi berbasis web, sistem penyimpanan email, dan solusi pengelolaan dokumen modern. HTML menyediakan format yang beragam yang memungkinkan penglihatan mudah, styling dan integrasi konten email menjadi sistem web. Aspose.Email LowCode Converter menyederhanakan proses ini, sehingga pengembang dapat mengubah EML dan MSG File dalam HTML dengan kompleksitas kode minimal.

Persyaratan

Sebelum melaksanakan konversi email-ke-HTML, pastikan lingkungan pengembangan Anda termasuk:

  • Visual Studio 2019 atau lebih baru (atau IDE .NET yang kompatibel)
  • .NET 6.0 SDK atau lebih tinggi
  • Aspose.Email Pakej NuGet
  • Pengetahuan dasar tentang C# dan pengelolaan file

Langkah 1: Instal Aspose.Email melalui NuGet

Instalasi paket Aspose.Email menggunakan salah satu metode berikut:

Konsol Pengelola Pembungkusan:

Install-Package Aspose.Email

Pengelola Paket UI:

  • Klik kanan pada proyek Anda di Solution Explorer
  • Pilih “Pengurusan Pakej NuGet”
  • Mencari untuk “Aspose.Email”
  • Klik pada “Install"

Pembungkusan dalam .csproj:

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

Langkah 2: Tuliskan kode konversi

Berikut adalah contoh lengkap yang menunjukkan konversi file 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}");
            }
        }
    }
}

Kode pemecahan:

  • Input Stream Penciptaan: File.OpenRead() Mencipta aliran dari file email sumber
  • Pengaturan output handler: FolderOutputHandler Manajemen di mana file HTML yang dikonversi disimpan
  • Pembuatan Konversi: Converter.ConvertToHtml() Menjalankan transformasi yang sebenarnya
  • Pengelolaan Sumber Daya: using Pernyataan memastikan penyimpanan yang tepat dari arus file

Langkah 3: Mengendalikan Multiple File (Batch Conversion)

Untuk memproses beberapa file email secara bersamaan, 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

Buat pengendali output tersuai untuk mengontrol nama file:

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 Kesalahan Komprehensif

Implementasi pemrosesan kesalahan yang kuat untuk lingkungan produksi:

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

Kesimpulan

Aspose.Email LowCode Converter menyediakan solusi yang lancar untuk mengkonversi file EML dan MSG ke format HTML:

  • Simplified API: kode minimum yang diperlukan untuk konversi kompleks
  • Batch Processing : Mengendalikan beberapa file dengan efisien dengan operasi kontemporer
  • Fleksibel Output : Handler tersuai untuk kebutuhan khusus nama dan penyimpanan
  • Robust Error Handling : Pengelolaan pengecualian komprehensif untuk penggunaan produksi
  • Support Asynchronous : Operasi non-blocking untuk kinerja aplikasi yang lebih baik

Pendekatan ini memungkinkan pengembang untuk mengintegrasikan konversi email-ke-HTML dengan mudah ke dalam aplikasi web, sistem manajemen dokumen, dan solusi archiving email. output HTML mempertahankan pemformatan email asli sambil memberikan kompatibilitas dengan standar web modern dan kerangka desain responsif.

 Indonesia