تبدیل فرمت ایمیل برای .NET
Aspose.Email LowCode Converter یک API ساده و سطح بالا برای تبدیل پیام های ایمیل بین فرمت های مختلف با پیچیدگی کد حداقل را فراهم می کند.این راهنمای توسعه دهنده شامل عملکرد اصلی، الگوهای پیاده سازی و بهترین شیوه ها برای استفاده از تبدیل در برنامه های .NET است.
بایگانی برچسب ها:LowCode
در این Aspose.Email.LowCode
نام فضای شامل کلاس هایی است که برای بهینه سازی عملیات تبدیل فرمت ایمیل طراحی شده است 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 Format
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 تبدیل خاص
برای تشخیص فرمت اتوماتیک بین EML و 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);
}
}
نرم افزار Format Matrix
فرمت ورودی | فرمت خروجی | روش |
---|---|---|
EML | HTML، MSG، MHTML، MHT | ConvertToHtml() , ConvertToMsg() , و غیره. |
MSG | HTML، EML، MHTML، MHT | ConvertToHtml() , ConvertToEml() , و غیره. |
هر فرمت ایمیل | مشخصات کاربر | Convert() با پارامتر نوع خروجی |
پیاده سازی پیشرفته
پردازش Batch
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"
};
}
ویندوز سرویس اجرایی
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 | اطمینان از فرمت ایمیل معتبر برای فایل ورودی |
نکات Debugging
امکان ثبت نام دقیق برای حل مشکلات:
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;
}
}