Електронна поща формат конвертор за .NET

The Aspose.Email LowCode Converter осигурява опростена, високо ниво API за конвертиране на имейл съобщения между различни формати с минимална сложност на кода. Този ръководство за разработчици обхваща основната функционалност, моделите за изпълнение и най-добрите практики за използване на преобразувача в .NET приложения.

Електронна поща.LowCode

на Aspose.Email.LowCode namespace съдържа класове, предназначени за усъвършенстване на операциите за конвертиране на имейл формат Converter клас, който предлага статични методи за преобразуване на имейл съобщения между популярни формати, включително EML, MSG, HTML, MHT и MHTML.

Ключови компоненти

  • Converter : Методи за статична конверсия за трансформация на формат на имейл
  • IoutputHandler : Интерфейс за обработка на конвертирани изходни потоци
  • FolderOutputHandler : Вградена имплементация за съхранение на източници, базирани на папки

Да започнем

инсталация

Инсталиране на пакета Aspose.Email чрез NuGet Package Manager:

Install-Package Aspose.Email

Декларация на името

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

Основни методи за конвертиране

Генерален формат на конвертиране

на Convert Методът осигурява гъвкава конверсия на формат с експлицитна спецификация на вида на изхода:

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

Пример за изпълнение:

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

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

Специализирани методи за конвертиране

Конверторът осигурява специални методи за общи сценарии за конвертиране:

Конвертиране на HTML формат

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

Конвертиране към MSG формат

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

Конвертиране на EML формат

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

Конвертиране на MHTML/MHT формати

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

EML/MSG специфична конверсия

За автоматично откриване на формат между ЕМЛ и MSG форматиране:

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

Изпълнение на производствения оператор

Използване на FolderOutputHandler

Вградените в FolderOutputHandler Класа автоматично съхранява конвертираните файлове в определена директория:

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

Пример за използване:

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

Изход на персонализирания търговец

Изпълнение на IOutputHandler Интерфейс за персонализирана обработка на изход:

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

Поддръжка за формат Matrix

Формат за влизанеИзходни форматиMethod
ЕМЛHTML, MSG, MHTML и MHTConvertToHtml(), ConvertToMsg(), .
MSGHTML, EML, MHTML и MHTConvertToHtml(), ConvertToEml(), .
Всеки формат на имейлПотребителски спецификацииConvert() При изходния тип параметър

Напредни модели за изпълнение

Изпълнение на Batch Processing

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

Образец за грешка

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

Мемориално оптимизирана обработка на потока

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

Конфигурация и персонализация

Изходна структура на директориума

Когато се използва FolderOutputHandler, Конверторът поддържа оригиналната структура на файла:

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

Стратегия за персонализиране

Изпълнение на персонализирано име на файла чрез специализиран оператор на изход:

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
}

Преглед на изпълнението

Асинхронни операции

Всички методи за конвертиране се връщат Task обекти, които позволяват ефективно асинхронно обработване:

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

Управление на ресурсите

Правилното разположение на потока е от решаващо значение за оптималното изпълнение:

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

Оптимизация на паметта

За големи имейл файлове, помислете за поточните подходи:

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

Примери за интеграция

ASP.NET Core Web API Интеграция

[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 Service

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

Съвместни проблеми и решения

ВъпросътРешение
FileNotFoundExceptionПроверявайте входния път на файла и разрешенията
UnauthorizedAccessExceptionПроверете директориума за изход Пишете разрешения
OutOfMemoryExceptionИзползвайте подход за стрийминг за големи файлове
InvalidOperationExceptionОсигуряване на валиден формат на имейл за входящи файлове

Дебютни съвети

Позволява подробно записване за решаване на проблеми:

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;
    }
}
 Български