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