이메일 형식 변환기 .NET
Aspose.Email LowCode Converter는 최소한의 코드 복잡성으로 다양한 형식 사이의 이메일 메시지를 변환하기위한 단순화되고 고급 API를 제공합니다.이 개발자 가이드는 핵심 기능, 구현 패턴 및 .NET 응용 프로그램에서 컨버터를 사용하는 최상의 관행을 다루고 있습니다.
아스포스.email.LowCode
그들의 Aspose.Email.LowCode
namespace는 이메일 형식 변환 작업을 단순화하도록 설계된 클래스를 포함합니다 Converter
클래스는 EML, MSG, HTML, MHT 및 MHTML을 포함한 인기 형식 사이의 이메일 메시지를 변환하는 정적 방법을 제공합니다.
핵심 구성 요소
- Converter : 이메일 형식 변환을위한 정적 전환 방법
- IOutputHandler : 변환 출력 스트림 처리 인터페이스
- FolderOutputHandler : 폴더 기반 출력 저장에 대한 내장된 구현
시작하기
설치
NuGet Package Manager를 통해 Aspose.Email 패키지를 설치하십시오:
Install-Package Aspose.Email
Namespace 선언문
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 특정 변환
자동 형식의 탐지에 대 한 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");
사용자 지정 수출 매니저
실행을 위한 The 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);
}
}
지원 형식 매트릭스
입력 형식 | 출력 형식 | 방법 |
---|---|---|
EML | HTML, MSG, MHTML 및 MHT | ConvertToHtml() , ConvertToMsg() , 그리고 등등. |
MSG | HTML, EML, MHTML 및 MHT | ConvertToHtml() , ConvertToEml() , 그리고 등등. |
모든 이메일 형식 | 사용자 지정 | Convert() 출력 유형 파라미터 |
고급 구현 패턴
배치 처리 실행
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
}
성과 고려 사항
Asynchronous 작업
모든 변환 방법 반환 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 코어 웹 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 서비스 구현
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;
}
}