Електронна поща формат конвертор за .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 и MHT | ConvertToHtml() , ConvertToMsg() , . |
MSG | HTML, EML, MHTML и MHT | ConvertToHtml() , 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;
}
}