E-mail Format Converter για το .NET

Το Aspose.Email LowCode Converter παρέχει ένα απλοποιημένο, υψηλού επιπέδου API για τη μετατροπή μηνυμάτων ηλεκτρονικού ταχυδρομείου μεταξύ διαφόρων μορφών με ελάχιστη πολυπλοκότητα κώδικα.Αυτός ο οδηγός προγραμματιστών καλύπτει τις βασικές λειτουργίες, τα πρότυπα εφαρμογής και τις βέλτιστες πρακτικές χρήσης του μετασχηματιστή σε εφαρμογές .NET.

Εισαγωγή στο email.LowCode

Η Aspose.Email.LowCode Το nameespace περιέχει μαθήματα που έχουν σχεδιαστεί για να απλοποιήσουν τις εργασίες μετατροπής μορφής ηλεκτρονικού ταχυδρομείου 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

Εισαγωγική μορφήΕισαγωγικές μορφέςΜέθοδος
ΕΜΛHTML, MSG, MHTML και MHTConvertToHtml(), ConvertToMsg(), κλπ.
MSGHTML, EML, MHTML και MHTConvertToHtml(), 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);

Βελτιστοποίηση χρήσης μνήμης

Για τα μεγάλα αρχεία ηλεκτρονικού ταχυδρομείου, εξετάστε τις προσεγγίσεις 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);
}

Παραδείγματα ολοκλήρωσης

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

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Χρησιμοποιήστε μια προσέγγιση streaming για μεγάλα αρχεία
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;
    }
}
 Ελληνικά