Email Format Converter cho .NET
Aspose.Email LowCode Converter cung cấp một API đơn giản, cấp cao để chuyển đổi tin nhắn email giữa các định dạng khác nhau với độ phức tạp mã tối thiểu. Hướng dẫn này của nhà phát triển bao gồm chức năng cốt lõi, mô hình thực hiện, và các thực hành tốt nhất để sử dụng máy biến trong các ứng dụng .NET.
Thông tin email.LowCode
của The Aspose.Email.LowCode
namespace chứa các lớp học được thiết kế để streamline các hoạt động chuyển đổi định dạng email. thành phần chính là Converter
lớp, cung cấp các phương pháp tĩnh để chuyển đổi tin nhắn email giữa các định dạng phổ biến bao gồm EML, MSG, HTML, MHT, và MHTML.
Các thành phần chính
- Converter : Phương pháp chuyển đổi tĩnh cho định dạng email
- IoutputHandler : Giao diện để xử lý dòng output chuyển đổi
- FolderOutputHandler : Thực hiện xây dựng cho lưu trữ kết quả dựa trên thư mục
Bắt đầu
Cài đặt
Cài đặt gói Aspose.Email thông qua NuGet Package Manager:
Install-Package Aspose.Email
Thông báo Namespace
using Aspose.Email.LowCode;
using System.IO;
using System.Threading.Tasks;
Phương pháp chuyển đổi Core
Định dạng Generic Conversion
của The Convert
phương pháp cung cấp chuyển đổi định dạng linh hoạt với các thông số cụ thể loại output:
public static Task Convert(Stream input, string nameWithExtension, IOutputHandler handler, string outputType)
Thực hiện ví dụ:
using var inputStream = File.OpenRead("email.eml");
var outputHandler = new FolderOutputHandler(@"C:\ConvertedEmails");
await Converter.Convert(inputStream, "email.eml", outputHandler, "html");
Phương pháp chuyển đổi chuyên môn
Converter cung cấp các phương pháp dành riêng cho các kịch bản chuyển đổi phổ biến:
Chuyển sang định dạng HTML
await Converter.ConvertToHtml(inputStream, "email.eml", outputHandler);
Chuyển sang MSG Format
await Converter.ConvertToMsg(inputStream, "email.eml", outputHandler);
Chuyển sang EML Format
await Converter.ConvertToEml(inputStream, "email.msg", outputHandler);
Chuyển đổi sang định dạng MHTML/MHT
await Converter.ConvertToMhtml(inputStream, "email.eml", outputHandler);
await Converter.ConvertToMht(inputStream, "email.eml", outputHandler);
EML/MSG chuyển đổi cụ thể
Để phát hiện định dạng tự động giữa EML và MSG định dạng:
await Converter.ConvertEmlOrMsg(inputStream, "email.eml", outputHandler, "html");
Xuất khẩu Handler
Sử dụng FolderOutputHandler
Cấu trúc built-in FolderOutputHandler
lớp tự động lưu các tập tin được chuyển đổi vào một thư mục cụ thể:
public class FolderOutputHandler : IOutputHandler
{
public FolderOutputHandler(string path)
public string Path { get; set; }
}
Sử dụng ví dụ:
var outputHandler = new FolderOutputHandler(@"C:\OutputDirectory");
Tùy chọn Output Handler
Thực hiện The IOutputHandler
Giao diện cho xử lý output tùy chỉnh:
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);
}
}
Hỗ trợ Format Matrix
Định dạng Input | định dạng output | Phương pháp |
---|---|---|
EML | HTML, MSG, MHTML, MHT | ConvertToHtml() , ConvertToMsg() , vv. |
MSG | HTML, EML, MHTML, MHT | ConvertToHtml() , ConvertToEml() , vv. |
bất kỳ email định dạng | Người dùng cụ thể | Convert() với loại output parameter |
Các mô hình thực hiện tiên tiến
Batch xử lý thực hiện
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);
}
}
Chế độ xử lý lỗi
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
};
}
}
Bộ xử lý lưu lượng nhớ tối ưu
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);
}
Configuration và Customization
cấu trúc Directory Output
Khi sử dụng FolderOutputHandler
, máy chuyển đổi duy trì cấu trúc tệp ban đầu:
var outputHandler = new FolderOutputHandler(@"C:\ConvertedEmails");
// Original: sample.eml → Output: C:\ConvertedEmails\sample.html
Chiến lược đặt tên tùy chỉnh
Thực hiện tên tập tin tùy chỉnh thông qua một nhà sản xuất chuyên ngành:
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
}
Các tính toán hiệu suất
hoạt động asynchronous
Tất cả phương pháp chuyển đổi trở lại Task
các đối tượng, cho phép xử lý không đồng bộ hiệu quả:
public async Task ProcessMultipleEmailsAsync()
{
var tasks = new[]
{
ConvertEmailAsync("email1.eml"),
ConvertEmailAsync("email2.msg"),
ConvertEmailAsync("email3.eml")
};
await Task.WhenAll(tasks);
}
Quản lý nguồn lực
Việc xử lý dòng chảy đúng đắn rất quan trọng cho hiệu suất tối ưu:
// 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);
Tối ưu hóa sử dụng bộ nhớ
Đối với các tập tin email lớn, hãy xem xét các cách tiếp cận streaming:
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);
}
Ví dụ về Integration
Kết hợp 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 thực hiện
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
Vấn đề Thường Gặp và Giải Pháp
vấn đề | Giải pháp |
---|---|
FileNotFoundException | Kiểm tra đường dẫn file input và giấy phép |
UnauthorizedAccessException | Check output directory viết giấy phép |
OutOfMemoryException | Sử dụng phương pháp streaming cho các tập tin lớn |
InvalidOperationException | Bảo đảm định dạng email hợp lệ cho tệp nhập |
Lời bài hát Debugging
Khả năng đăng ký chi tiết để giải quyết vấn đề:
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;
}
}