Sähköpostimuoto Converter for .NET

Aspose.Email LowCode Converter tarjoaa yksinkertaistetun, korkean tason API: n muuntaa sähköpostiviestejä eri muodoissa minimaalisen koodin monimutkaisuuden kanssa.Tämä kehittäjän opas kattaa keskeiset toiminnallisuudet, täytäntöönpanokäytännöt ja parhaat käytännöt konversiosta .NET-sovelluksissa.

Lähetä sähköposti.LowCode

Se on Aspose.Email.LowCode namespace sisältää luokat, jotka on suunniteltu yksinkertaistamaan sähköpostimuotoisen muunnostoiminnan Converter luokka, joka tarjoaa staattisia menetelmiä sähköpostiviestien muuntamiseen suosittujen muotojen välillä, kuten EML, MSG, HTML, MHT ja MHTML.

Tärkeimmät komponentit

  • Converter : staattiset muuntomenetelmät sähköpostimuodostukseen
  • IoutputHandler : käyttöliittymä muunnettujen tulosvirtojen käsittelyyn
  • FolderOutputHandler : Sisäänrakennettu täytäntöönpano tuonnin säilytyslaatikon perusteella

Aloittaminen

asennuksen

Asenna Aspose.Email -paketti NuGet Package Managerin kautta:

Install-Package Aspose.Email

Namespace julistus

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

Core Conversion -menetelmät

Yleinen muuntomuoto

Se on Convert menetelmä tarjoaa joustavan muodon muuntamisen selkeällä tulotyypin eritelmällä:

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

Esimerkkinä toteutus:

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

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

Erikoistuneet muuntomenetelmät

Muunnin tarjoaa omistettuja menetelmiä yhteisiin muuntumisskenaarioihin:

Muuntaminen HTML-muotoon

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

Muuntaminen MSG-muotoon

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

Muuntaminen EML-muotoon

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

Muuntaminen MHTML/MHT-muodoksiin

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

EML/MSG erityinen muuntaminen

automaattinen muotoilun havaitseminen EML ja MSG ja formattit:

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

Tuonninhoitajan toteuttaminen

Käytä FolderOutputHandler

Sisäänrakennettu FolderOutputHandler luokka tallentaa automaattisesti muunnetut tiedostot määritellylle direktiiville:

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

Käytä esimerkkiä:

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

Käsitelty tuonnin kauppia

toteuttaminen on IOutputHandler käyttöliittymä räätälöityyn tulon käsittelyyn:

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

Tuettu Format Matrix

SisäänkäyntiformaattiLähtömuodotMethod
EMLHTML, MSG, MHTML ja MHTConvertToHtml(), ConvertToMsg(), ja niin edelleen.
MSGHTML, EML, MHTML ja MHTConvertToHtml(), ConvertToEml(), ja niin edelleen.
Kaikki sähköpostiformaatiotKäyttäjälle määriteltyConvert() Tuotetyypin parametrit

Edistyneet täytäntöönpanon mallit

Batch-käsittelyn toteuttaminen

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

Virheiden käsittelyn malli

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

Muistin optimoitu virran käsittely

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

Konfiguraatio ja mukauttaminen

Lähtörekisterin rakenne

Kun käytetään FolderOutputHandler, muunnin ylläpitää alkuperäisen tiedoston rakenteen:

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

Käsitelty nimitystrategia

Käytä räätälöityä tiedostoa nimittämällä erikoistuneen tuotantovälittäjän kautta:

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
}

suorituskyvyn huomioon ottaminen

Asynkroniset toiminnot

Kaikki muuntomenetelmät palautuvat Task esineitä, jotka mahdollistavat tehokkaan synkronisen käsittelyn:

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

Resurssien hallinta

Oikea virta on välttämätön optimaalisen suorituskyvyn kannalta:

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

Muistin käyttöoptimointi

Suuriin sähköpostitiedostoihin harkitse streaming lähestymistapoja:

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

Esimerkkejä yhdentymisestä

ASP.NET Core Web API -järjestelmä

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

Windowsin palvelun toteuttaminen

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

Yhteiset ongelmat ja ratkaisut

OngelmaRatkaisu
FileNotFoundExceptionTarkista sisäänpääsytiedoston reitti ja luvat
UnauthorizedAccessExceptionTarkista tuotantodirektiivi kirjoittaa luvat
OutOfMemoryExceptionKäytä suoraa lähestymistapaa suurille tiedostoille
InvalidOperationExceptionVarmista voimassa oleva sähköpostiformaatti sisäänpääsytiedostoon

Debugging vinkkejä

Mahdollistaa yksityiskohtainen kirjaaminen ongelmanratkaisuun:

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