न्यूनतम कोड के साथ संदेशों को बदलें और ट्रांसफ़ॉर्म करें
एक ईमेल को रूपांतरित करना अर्थ था इसे एक MailMessage, सही SaveOptions, स्ट्रीम को जोड़ते हुए, और याद रखता है कि कौन सा फॉर्मेट कौन से स्विच की आवश्यकता रखता है। The Aspose.Email.LowCode नेमस्पेस को एकल स्थैतिक कॉल में संग्रहीत करता है। आप इसे एक स्ट्रीम, फ़ाइल नाम, और इच्छित फॉर्मेट देते हैं — यह बाकी का पता लगाता है और परिणाम जहाँ आप चाहते हैं वहाँ लिख देता है।5899c1__](../src/LowCodeEmailConversion) परियोजना जो इसके साथ शिप होती है।
"लो‑कोड" नेमस्पेस क्यों?
Aspose.Email.LowCode पूरा ईमेल API के ऊपर एक हल्का, कार्य‑उन्मुख सतह है। यह 80% मामलों के लिए मौजूद है — "मुझे सिर्फ इस संदेश को उस फॉर्मेट में बदलना है" — जहाँ आप संदेश मॉडल, MIME, या स्थायित्व विकल्पों के बारे में सोचना नहीं चाहते।
यह तीन प्रकारों के चारों ओर निर्मित है:
| प्रकार | भूमिका | | — | — | | Converter | स्थैतिक मेथड जो रूपांतरण करते हैं। | |94b97d5590014b04_IOutputHandler) मुख्य डिज़ाइन विचार है: वही एक‑लाइन रूपांतरण डिस्क, मेमोरी, डेटाबेस, क्लाउड बकेट, या HTTP रिस्पॉन्स को लक्ष्य बना सकता है बस हैंडलर को बदलकर।
कनवर्टर API एक नज़र में
हर मेथड है static, एक लौटाता है Task, और समान रूप बनाता है:
Task Converter.ConvertToEml (Stream input, string nameWithExtension, IOutputHandler handler);
Task Converter.ConvertToMsg (Stream input, string nameWithExtension, IOutputHandler handler);
Task Converter.ConvertToHtml (Stream input, string nameWithExtension, IOutputHandler handler);
Task Converter.ConvertToMht (Stream input, string nameWithExtension, IOutputHandler handler);
Task Converter.ConvertToMhtml(Stream input, string nameWithExtension, IOutputHandler handler);
// Format chosen at run time via the outputType string ("eml", "msg", "html", ...):
Task Converter.Convert (Stream input, string nameWithExtension, IOutputHandler handler, string outputType);
Task Converter.ConvertEmlOrMsg(Stream input, string nameWithExtension, IOutputHandler handler, string outputType);
| पैरामीटर | अर्थ | | — | — | | input | स्रोत संदेश एक Stream (एक फ़ाइल, एक अपलोड, एक मेमोरी बफ़र…)। | | nameWithExtension | मूल फ़ाइल नाम, जैसे "message.msg". एक्सटेंशन कनवर्टर को स्रोत फॉर्मेट बताता है, इसलिए यह सही होना चाहिए। | | handler | यह IOutputHandler जो रूपांतरित आउटपुट स्ट्रीम प्राप्त करता है। | | outputType | (केवल रन‑टाइम ओवरलोड) लक्ष्य फॉर्मेट स्ट्रिंग के रूप में। |
समर्थित स्रोत फॉर्मेट EML और MSG हैं; समर्थित लक्ष्य EML, MSG, HTML, MHT, और MHTML हैं।
नोट: ये मेथड असिंक्रोनस हैं — हमेशा
awaitउन्हें। कनवर्टर > हैंडलर को उस कार्य के हिस्से के रूप में लिखता है, इसलिए आउटपुट की फ्लश गारंटी नहीं है > जब तक लौटाया नहीं गयाTaskपूरा करता है।
ऑटो‑डिटेक्टिंग रूपांतरण
Convert एक्सटेंशन को पढ़ता है nameWithExtension, स्रोत फॉर्मेट का पता लगाता है, और जो भी बनाता है outputType आपके अनुरोध के अनुसार। यह सबसे लचीला प्रवेश बिंदु है जब लक्ष्य फॉर्मेट रन‑टाइम पर तय किया जाता है (उदाहरण के लिए, उपयोगकर्ता इनपुट या कॉन्फ़िगरेशन से)।
using Aspose.Email.LowCode;
using FileStream input = File.OpenRead("message.msg");
var handler = new FolderOutputHandler(@"C:\output\auto");
await Converter.Convert(input, "message.msg", handler, "eml");
MSG → EML
जब लक्ष्य स्थिर और संकलन समय पर ज्ञात हो, तो स्पष्ट, अभिप्राय-सूचक मेथड को प्राथमिकता दें। ConvertToEml एक Outlook को बदलता है .msg एक मानक RFC 822 में .eml:
using FileStream input = File.OpenRead("message.msg");
var handler = new FolderOutputHandler(@"C:\output\eml");
await Converter.ConvertToEml(input, "message.msg", handler);
EML → MSG
उल्टी दिशा। उपयोग करें ConvertToMsg जब कोई एप्लिकेशन या प्राप्तकर्ता मूल Outlook वस्तुओं की अपेक्षा करता है:
using FileStream input = File.OpenRead("message.eml");
var handler = new FolderOutputHandler(@"C:\output\msg");
await Converter.ConvertToMsg(input, "message.eml", handler);
ईमेल → HTML
ConvertToHtml एक संदेश को एक स्वतंत्र HTML दस्तावेज़ के रूप में रेंडर करता है — ब्राउज़र में ईमेल का पूर्वावलोकन करने या वेब पेज में एम्बेड करने के लिए आदर्श। यह या तो स्वीकार करता है
.eml या .msg इनपुट:
using FileStream input = File.OpenRead("message.eml");
var handler = new FolderOutputHandler(@"C:\output\html");
await Converter.ConvertToHtml(input, "message.eml", handler);
ईमेल → MHT और MHTML
दोनों फॉर्मेट संदेश बॉडी और उसके संसाधनों को एकल वेब-आर्काइव फ़ाइल में बंडल करते हैं, जो आर्काइविंग या स्व-समाहित स्नैपशॉट साझा करने के लिए सुविधाजनक है। MHTML अधिक समृद्ध संस्करण है और आमतौर पर ईमेल हेडर (From / To / Subject / Date) को रेंडर्ड आउटपुट में संरक्षित करता है।
// MHT
using (FileStream input = File.OpenRead("message.msg"))
await Converter.ConvertToMht(input, "message.msg", new FolderOutputHandler(@"C:\output\mht"));
// MHTML
using (FileStream input = File.OpenRead("message.eml"))
await Converter.ConvertToMhtml(input, "message.eml", new FolderOutputHandler(@"C:\output\mhtml"));
केवल आवश्यक होने पर रूपांतरित करें
ConvertEmlOrMsg इनपुट को अनुरोधित फॉर्मेट में बदलता है केवल तभी जब वह पहले से उस फॉर्मेट में न हो। इसे मिश्रित ढेर में निर्देशित करें .eml और .msg फ़ाइलें और अनुरोध करते हैं "eml": यह .eml फ़ाइलें पास होकर आगे बढ़ती हैं, .msg फ़ाइलें रूपांतरित हो जाती हैं — बिना आपको स्वयं एक्सटेंशन पर आधारित शाखा बनाने के। यह नॉर्मलाइज़ करने के लिए परिपूर्ण है ताकि इनबॉक्स को एक फॉर्मेट में बदला जा सके।
// .eml input requesting "eml" -> passes through
using (FileStream input = File.OpenRead("message.eml"))
await Converter.ConvertEmlOrMsg(input, "message.eml", handler, "eml");
// .msg input requesting "eml" -> converted
using (FileStream input = File.OpenRead("message.msg"))
await Converter.ConvertEmlOrMsg(input, "message.msg", handler, "eml");
फ़ोल्डर का बैच-रूपांतरण
चूंकि प्रत्येक रूपांतरण केवल एक मेथड कॉल है, बड़े पैमाने पर काम के लिए स्केलिंग में लगभग कोई अतिरिक्त कोड नहीं चाहिए — फ़ाइलों की सूची बनाएँ और हैंडलर को पुन: उपयोग करें। यहाँ प्रत्येक फ़ोल्डर में संदेश को HTML में रेंडर किया जाता है:
foreach (string path in Directory.EnumerateFiles(inputDir)
.Where(f => f.EndsWith(".eml") || f.EndsWith(".msg")))
{
var handler = new FolderOutputHandler(Path.Combine(outputDir, Path.GetFileNameWithoutExtension(path)));
using FileStream input = File.OpenRead(path);
await Converter.Convert(input, Path.GetFileName(path), handler, "html");
}
सुझाव:
FolderOutputHandlerएक मौजूदा फ़ोल्डर में लिखता है लेकिन > इसे नहीं बनाता। कॉलDirectory.CreateDirectory(...)पहले। प्रत्येक स्रोत को अपना > सबफ़ोल्डर देना कई संदेशों के एक ही बेस नाम साझा करने पर टकराव को रोकता है > (दोmessage.*फ़ाइलें अन्यथा दोनों लिखना चाहेंगीmessage.html).
डिस्क के अलावा किसी अन्य स्थान पर आउटपुट भेजना
यह वह जगह है जहाँ IOutputHandler एब्स्ट्रैक्शन देता है। इंटरफ़ेस बहुत छोटा है:
public interface IOutputHandler
{
void AddOutputStream(string name, Action<Stream> writeAction);
Task AddOutputStream(string name, Func<Stream, Task> writeActionAsync);
}
कन्वर्टर इन ओवरलोड्स में से एक को आउटपुट फ़ाइल नाम और राइटर के साथ कॉल करता है। आपका कार्यान्वयन एक Stream और बाइट्स के साथ क्या करना है तय करता है। मेमोरी में सभी को पकड़ने वाला हैंडलर इस प्रकार दिखता है:
public sealed class InMemoryOutputHandler : IOutputHandler
{
private readonly Dictionary<string, byte[]> _files = new(StringComparer.OrdinalIgnoreCase);
public IReadOnlyDictionary<string, byte[]> Files => _files;
public void AddOutputStream(string name, Action<Stream> writeAction)
{
using var buffer = new MemoryStream();
writeAction(buffer);
_files[name] = buffer.ToArray();
}
public async Task AddOutputStream(string name, Func<Stream, Task> writeActionAsync)
{
using var buffer = new MemoryStream();
await writeActionAsync(buffer);
_files[name] = buffer.ToArray();
}
}
परिवर्तन कॉल स्वयं अपरिवर्तित रहती है — केवल हैंडलर बदलता है:
var handler = new InMemoryOutputHandler();
using (FileStream input = File.OpenRead("message.msg"))
await Converter.ConvertToHtml(input, "message.msg", handler);
byte[] html = handler.Files["message.html"]; // stream it, store it, return it...
यहाँ से यह एक छोटा कदम है एक Stream-to-क्लाउड या Stream-to-HTTP-response हैंडलर।
सही विधि चुनना
| लक्ष्य | उपयोग | | — | — | | लक्ष्य स्वरूप कंपाइल टाइम पर ज्ञात | ConvertToEml / ConvertToMsg / ConvertToHtml / ConvertToMht / ConvertToMhtml | | लक्ष्य स्वरूप रनटाइम पर निर्धारित होता है | Convert(..., outputType) | | फ़ाइलों को सामान्यीकृत करें, लक्ष्य स्वरूप में पहले से मौजूद फ़ाइलों को छोड़ते हुए | ConvertEmlOrMsg(..., outputType) | | परिणामों को फ़ोल्डर में लिखें | FolderOutputHandler | | परिणामों को मेमोरी / क्लाउड / HTTP / डेटाबेस में लिखें | एक कस्टम IOutputHandler |