Elektroninio pašto formatų konvertuotojas .NET

Aspose.Email LowCode Converter suteikia supaprastintą, aukšto lygio API, skirtą elektroninio pašto pranešimų konvertavimui tarp skirtingų formatų su minimaliu kodo sudėtingumu.Šis kūrėjų vadovas apima pagrindines funkcijas, įgyvendinimo modelius ir geriausias praktikas konverterio naudojimui .NET programas.

Pašto kodas.LowCode

The Aspose.Email.LowCode namespace yra klasių, skirtų elektroninio pašto formato konvertavimo operacijoms supaprastinti Converter klasė, kuri siūlo statinius metodus elektroninio pašto pranešimų transformavimui tarp populiarių formatų, įskaitant EML, MSG, HTML, MHT ir MHTML.

Pagrindiniai komponentai

  • Converter : statinės konvertavimo metodai elektroninio pašto formato transformacijai
  • IoutputHandler : sąsaja, skirta konvertuoti išleidimo srautų tvarkymui
  • FolderOutputHandler : Įterptas įgyvendinimas lapo pagrįsto išleidimo saugojimui

pradėti

Installation

Įdiegti Aspose.Email paketą per NuGet Package Manager:

Install-Package Aspose.Email

Pavadinimas Deklaracija

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

Pagrindiniai konvertavimo metodai

Generinis formatas konvertavimas

The Convert metodas suteikia lanksčią formatų konvertavimą su aiškiu išleidimo tipo specifikacija:

public static Task Convert(Stream input, string nameWithExtension, IOutputHandler handler, string outputType)

Įgyvendinimo pavyzdys:

using var inputStream = File.OpenRead("email.eml");
var outputHandler = new FolderOutputHandler(@"C:\ConvertedEmails");

await Converter.Convert(inputStream, "email.eml", outputHandler, "html");

Specializuotas konvertavimo metodas

Konverteris siūlo skirtus metodus bendriems konvertavimo scenarijams:

Konvertavimas į HTML formatą

await Converter.ConvertToHtml(inputStream, "email.eml", outputHandler);

Konvertavimas į MSG formatą

await Converter.ConvertToMsg(inputStream, "email.eml", outputHandler);

Konvertavimas į EML formatą

await Converter.ConvertToEml(inputStream, "email.msg", outputHandler);

Konvertavimas į MHTML/MHT formatus

await Converter.ConvertToMhtml(inputStream, "email.eml", outputHandler);
await Converter.ConvertToMht(inputStream, "email.eml", outputHandler);

EML / MSG specifinis konvertavimas

Automatinis formato aptikimas tarp EML ir MSG Iš formų:

await Converter.ConvertEmlOrMsg(inputStream, "email.eml", outputHandler, "html");

Išleidimo operatorių įgyvendinimas

Naudokite „FolderOutputHandler

Įsikūręs į FolderOutputHandler klasė automatiškai išsaugo konvertuotus failus į nurodytą katalogą:

public class FolderOutputHandler : IOutputHandler
{
    public FolderOutputHandler(string path)
    public string Path { get; set; }
}

Naudojamas pavyzdys:

var outputHandler = new FolderOutputHandler(@"C:\OutputDirectory");

Kūrybinio išleidimo tvarkytojas

Įgyvendinimas The IOutputHandler sąsaja, skirta pritaikytam išleidimo apdorojimui:

public class CustomOutputHandler : IOutputHandler
{
    public async Task AddOutputStream(string name, Func<Stream, Task> writeAction)
    {
        // Custom async implementation
        using var customStream = CreateCustomStream(name);
        await writeAction(customStream);
    }
    
    public void AddOutputStream(string name, Action<Stream> writeAction)
    {
        // Custom synchronous implementation
        using var customStream = CreateCustomStream(name);
        writeAction(customStream);
    }
}

Rekomenduojamas formatas Matrix

Įvesties formatasIšleidimo formatasMethod
EMLHTML, MSG, MHTML ir MHTConvertToHtml(), ConvertToMsg(), ir tt.
MSGHTML, EML, MHTML ir MHTConvertToHtml(), ConvertToEml(), ir tt.
Bet koks elektroninio pašto formatasNaudotojo specifikacijaConvert() Išleidimo tipo parametras

Išplėstinės įgyvendinimo modeliai

Batch apdorojimo įgyvendinimas

public class EmailBatchConverter
{
    private readonly IOutputHandler _outputHandler;
    
    public EmailBatchConverter(IOutputHandler outputHandler)
    {
        _outputHandler = outputHandler;
    }
    
    public async Task ConvertBatch(IEnumerable<string> emailFiles, string outputFormat)
    {
        var conversionTasks = emailFiles.Select(async file =>
        {
            using var stream = File.OpenRead(file);
            var fileName = Path.GetFileName(file);
            
            await Converter.Convert(stream, fileName, _outputHandler, outputFormat);
        });
        
        await Task.WhenAll(conversionTasks);
    }
}

Klaidų tvarkymo modelis

public async Task<ConversionResult> SafeConvert(string inputFile, string outputFormat)
{
    try
    {
        using var inputStream = File.OpenRead(inputFile);
        var outputHandler = new FolderOutputHandler(@"C:\Output");
        var fileName = Path.GetFileName(inputFile);
        
        await Converter.Convert(inputStream, fileName, outputHandler, outputFormat);
        
        return new ConversionResult { Success = true };
    }
    catch (Exception ex)
    {
        return new ConversionResult 
        { 
            Success = false, 
            ErrorMessage = ex.Message 
        };
    }
}

Atminties optimizuotas srovės apdorojimas

public async Task ConvertWithMemoryOptimization(string inputFile)
{
    using var inputStream = new FileStream(inputFile, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, useAsync: true);
    var outputHandler = new FolderOutputHandler(@"C:\Output");
    
    await Converter.ConvertToHtml(inputStream, Path.GetFileName(inputFile), outputHandler);
}

Konfiguravimas ir pritaikymas

Išleidimo direktorijos struktūra

Kai naudojama FolderOutputHandler, Konverteris palaiko originalią failų struktūrą:

var outputHandler = new FolderOutputHandler(@"C:\ConvertedEmails");
// Original: sample.eml → Output: C:\ConvertedEmails\sample.html

Nuosavų pavadinimų strategija

Įdiegti pritaikytą failų pavadinimą per specializuotą išleidimo operatorių:

public class TimestampOutputHandler : IOutputHandler
{
    private readonly string _basePath;
    
    public TimestampOutputHandler(string basePath)
    {
        _basePath = basePath;
    }
    
    public async Task AddOutputStream(string name, Func<Stream, Task> writeAction)
    {
        var timestamp = DateTime.Now.ToString("yyyyMMdd_HHmmss");
        var newName = $"{timestamp}_{name}";
        var filePath = Path.Combine(_basePath, newName);
        
        using var fileStream = File.Create(filePath);
        await writeAction(fileStream);
    }
    
    // Synchronous implementation omitted for brevity
}

Veiksmingumo apžvalgos

Asynchrono operacijos

Visi konvertavimo metodai grįžta Task objektų, leidžiančių veiksmingą asynchroninį apdorojimą:

public async Task ProcessMultipleEmailsAsync()
{
    var tasks = new[]
    {
        ConvertEmailAsync("email1.eml"),
        ConvertEmailAsync("email2.msg"),
        ConvertEmailAsync("email3.eml")
    };
    
    await Task.WhenAll(tasks);
}

Išteklių valdymas

Tinkamas srautas yra labai svarbus optimaliam efektyvumui:

// Correct pattern
using (var inputStream = File.OpenRead("email.eml"))
{
    await Converter.ConvertToHtml(inputStream, "email.eml", outputHandler);
}

// Alternative using statement
using var inputStream = File.OpenRead("email.eml");
await Converter.ConvertToHtml(inputStream, "email.eml", outputHandler);

Atminties naudojimo optimizavimas

Dideliems el. pašto failams apsvarstykite streikimo metodus:

public async Task ConvertLargeEmail(string inputPath)
{
    const int bufferSize = 65536; // 64KB buffer
    
    using var inputStream = new FileStream(inputPath, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize, true);
    var outputHandler = new FolderOutputHandler(@"C:\Output");
    
    await Converter.ConvertToHtml(inputStream, Path.GetFileName(inputPath), outputHandler);
}

Integracijos pavyzdžiai

ASP.NET Core Web API integravimas

[ApiController]
[Route("api/[controller]")]
public class EmailConverterController : ControllerBase
{
    [HttpPost("convert")]
    public async Task<IActionResult> ConvertEmail(IFormFile emailFile, [FromQuery] string format = "html")
    {
        if (emailFile == null || emailFile.Length == 0)
            return BadRequest("No file provided");
        
        try
        {
            using var inputStream = emailFile.OpenReadStream();
            var outputHandler = new MemoryOutputHandler();
            
            await Converter.Convert(inputStream, emailFile.FileName, outputHandler, format);
            
            return File(outputHandler.GetContent(), GetContentType(format), $"converted.{format}");
        }
        catch (Exception ex)
        {
            return StatusCode(500, $"Conversion failed: {ex.Message}");
        }
    }
    
    private string GetContentType(string format) => format.ToLower() switch
    {
        "html" => "text/html",
        "mhtml" => "message/rfc822",
        "eml" => "message/rfc822",
        _ => "application/octet-stream"
    };
}

Windows“ paslaugų įgyvendinimas

public class EmailConverterService : BackgroundService
{
    private readonly string _watchFolder;
    private readonly string _outputFolder;
    
    public EmailConverterService(IConfiguration config)
    {
        _watchFolder = config["EmailConverter:WatchFolder"];
        _outputFolder = config["EmailConverter:OutputFolder"];
    }
    
    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        var watcher = new FileSystemWatcher(_watchFolder, "*.eml");
        watcher.Created += async (sender, e) => await ProcessEmailFile(e.FullPath);
        watcher.EnableRaisingEvents = true;
        
        while (!stoppingToken.IsCancellationRequested)
        {
            await Task.Delay(1000, stoppingToken);
        }
    }
    
    private async Task ProcessEmailFile(string filePath)
    {
        using var inputStream = File.OpenRead(filePath);
        var outputHandler = new FolderOutputHandler(_outputFolder);
        
        await Converter.ConvertToHtml(inputStream, Path.GetFileName(filePath), outputHandler);
    }
}

Troubleshooting

Bendros problemos ir sprendimai

IssueSolution
FileNotFoundExceptionPatikrinkite įvesties failo maršrutą ir leidimus
UnauthorizedAccessExceptionPatikrinkite išleidimo katalogą rašyti leidimus
OutOfMemoryExceptionNaudokite streaming metodą dideliems failams
InvalidOperationExceptionUžtikrinti galiojantį elektroninio pašto formatą įvesties failą

Debugging patarimai

Galima išsamiai registruoti problemų sprendimui:

public async Task ConvertWithLogging(string inputFile)
{
    var logger = LoggerFactory.Create(builder => builder.AddConsole()).CreateLogger<EmailConverter>();
    
    try
    {
        logger.LogInformation($"Starting conversion of {inputFile}");
        
        using var inputStream = File.OpenRead(inputFile);
        var outputHandler = new FolderOutputHandler(@"C:\Output");
        
        await Converter.ConvertToHtml(inputStream, Path.GetFileName(inputFile), outputHandler);
        
        logger.LogInformation($"Successfully converted {inputFile}");
    }
    catch (Exception ex)
    {
        logger.LogError(ex, $"Failed to convert {inputFile}");
        throw;
    }
}
 Lietuvių