संदेश अटैचमेंट्स का प्रबंधन
Outlook में अटैचमेंट्स का हैंडलिंग
Outlook संदेश (MSG) फ़ाइलों को बनाना और सहेजना समझाता है कि संदेशों को कैसे बनाया और सहेजा जाए, और अटैचमेंट्स के साथ MSG फ़ाइलें कैसे बनाई जाएँ। यह लेख Aspose.Email के साथ Microsoft Outlook अटैचमेंट्स को कैसे प्रबंधित किया जाए, बताता है। संदेश फ़ाइल से अटैचमेंट्स तक पहुँच प्राप्त की जाती है और उन्हें डिस्क पर सहेजा जाता है, इसके लिए उपयोग किया जाता है MapiMessage क्लास अटैचमेंट्स प्रॉपर्टी। यह अटैचमेंट्स प्रॉपर्टी प्रकार की एक कलेक्शन है MapiAttachmentCollection क्लास।
अटैचमेंट प्रकार जांचें (इनलाइन या नियमित)
इनलाइन और नियमित अटैचमेंट्स अलग-अलग उद्देश्यों की पूर्ति करते हैं। इनलाइन अटैचमेंट्स ईमेल संदेश में दृश्य रूप से एकीकृत होते हैं और सामान्यतः छवियों या मीडिया फ़ाइलों होते हैं। जबकि नियमित अटैचमेंट्स ईमेल से अलग फ़ाइलें होती हैं और विभिन्न प्रकार की फ़ाइलों को शामिल कर सकती हैं। The MapiAttachment.IsInline की प्रॉपर्टी MapiAttachment क्लास एक मान प्राप्त करता है जो यह दर्शाता है कि अटैचमेंट इनलाइन है या सामान्य।
निम्नलिखित कोड नमूना लोडेड MapiMessage में प्रत्येक अटैचमेंट की जानकारी निकालता और प्रदर्शित करता है, जिसमें उनके डिस्प्ले नाम और यह कि वे इनलाइन अटैचमेंट हैं या नहीं, शामिल है।
var message = MapiMessage.Load(fileName);
foreach (var attach in message.Attachments)
{
Console.WriteLine($"{attach.DisplayName} : {attach.IsInline}");
}
अटैचमेंट प्रकार जांचें (IsReference)
यह MapiAttachment कक्षा में शामिल है IsReference प्रॉपर्टी जो डेवलपर्स को संदेश में रेफ़रेंस अटैचमेंट पहचानने की सुविधा देता है। निम्नलिखित कोड नमूने के साथ, आप जांच सकते हैं कि अटैचमेंट रेफ़रेंस अटैचमेंट है या नहीं:
foreach (var attachment in msg.Attachments)
{
if (attachment.IsReference)
{
// Process reference attachment
}
}
MSG फ़ाइलों से अटैचमेंट्स सहेजें
MSG फ़ाइल से अटैचमेंट्स सहेजने के लिए:
- परिचालित करें MapiAttachmentCollection कलेक्शन और व्यक्तिगत अटैचमेंट्स प्राप्त करें।
- अटैचमेंट को सहेजने के लिए, MapiAttachment क्लास की Save() मेथड को कॉल करें।
निम्नलिखित कोड स्निपेट दर्शाता है कि अटैचमेंट्स को स्थानीय डिस्क पर कैसे सहेजा जाए।
// Create an instance of MapiMessage from file
MapiMessage message = MapiMessage.FromFile(dataDir + fileName);
// Iterate through the attachments collection
foreach (MapiAttachment attachment in message.Attachments)
{
// Save the individual attachment
attachment.Save(dataDir + attachment.FileName);
}
RTF-फ़ॉर्मैटेड MSG फ़ाइलों से अटैचमेंट निकालें
RTF के रूप में फ़ॉर्मैट किए गए संदेशों के लिए, निम्नलिखित कोड का उपयोग इनलाइन या संदेश बॉडी में आइकन के रूप में दिखाई देने वाले अटैचमेंट्स को अलग करने और निकालने के लिए किया जा सकता है। निम्नलिखित कोड स्निपेट दर्शाता है कि कैसे MSG (जो RTF में फ़ॉर्मैट किया गया है) से एम्बेडेड अटैचमेंट की पहचान और निष्कर्षण किया जाए।
var eml = MapiMessage.Load("MSG file with RTF Formatting.msg");
foreach (var attachment in eml.Attachments)
{
if (IsAttachmentInline(attachment))
{
try
{
SaveAttachment(attachment, Guid.NewGuid().ToString());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
static bool IsAttachmentInline(MapiAttachment attachment)
{
foreach (var property in attachment.ObjectData.Properties.Values)
{
if (property.Name == "\x0003ObjInfo")
{
var odtPersist1 = BitConverter.ToUInt16(property.Data, 0);
return (odtPersist1 & (1 << (7 - 1))) == 0;
}
}
return false;
}
static void SaveAttachment(MapiAttachment attachment, string fileName)
{
foreach (var property in attachment.ObjectData.Properties.Values)
{
if (property.Name == "Package")
{
using var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
fs.Write(property.Data, 0, property.Data.Length);
}
}
}
नेस्टेड मेल संदेश अटैचमेंट्स प्राप्त करें
एम्बेडेड OLE अटैचमेंट्स भी यहाँ प्रकट होते हैं MapiMessage क्लास अटैचमेंट कलेक्शन। निम्नलिखित कोड उदाहरण एम्बेडेड संदेश अटैचमेंट्स के लिए संदेश फ़ाइल को पार्स करता है और इसे डिस्क पर सहेजता है। The MapiMessage क्लास FromProperties() की स्टेटिक मेथड एम्बेडेड अटैचमेंट से नया संदेश बना सकती है। निम्नलिखित कोड स्निपेट दर्शाता है कि नेस्टेड मेल संदेश अटैचमेंट्स को कैसे प्राप्त किया जाए।
// Create a MapiMessage object from the individual attachment
MapiMessage getAttachment = MapiMessage.FromProperties(attachment.ObjectData.Properties);
// Convert the embedded message to a MailMessage and save it to disk
MailMessage mailMessage = getAttachment.ToMailMessage(new MailConversionOptions());
mailMessage.Save(dataDir + @"NestedMailMessageAttachments_out.eml", SaveOptions.DefaultEml);
अटैचमेंट्स हटाएँ
Aspose Outlook लाइब्रेरी Microsoft Outlook Message (.msg) फ़ाइलों से अटैचमेंट हटाने की कार्यक्षमता प्रदान करती है:
- RemoveAttachments() मेथड को कॉल करें। यह संदेश फ़ाइल का पाथ पैरामीटर के रूप में लेता है। यह एक पब्लिक स्टैटिक मेथड के रूप में कार्यान्वित है, इसलिए आपको ऑब्जेक्ट को इंस्टैंशिएट करने की जरूरत नहीं है।
निम्नलिखित कोड स्निपेट दिखाता है कि कैसे अटैचमेंट हटाएँ।
MapiMessage.RemoveAttachments(dataDir + "AttachmentsToRemove_out.msg");
आप भी कॉल कर सकते हैं MapiMessage क्लास स्टेटिक मेथड DestroyAttachments(). यह RemoveAttachments() से तेज़ काम करता है, क्योंकि RemoveAttachments() मेथड संदेश फ़ाइल को पार्स करता है।
MapiMessage.DestroyAttachments(dataDir + "AttachmentsToDestroy_out.msg");
MSG अटैचमेंट्स जोड़ें
एक Outlook संदेश में अन्य Microsoft Outlook संदेश अटैचमेंट के रूप में नियमित या एम्बेडेड संदेशों के रूप में हो सकते हैं। The MapiAttachmentCollection के ओवरलोडेड सदस्य प्रदान करता है Add दोनों प्रकार के अटैचमेंट के साथ Outlook संदेश बनाने की मेथड:
Add(string name, byte[] data)– बाइट एरे से नियमित अटैचमेंट जोड़ता है।Add(string name, MapiMessage message)– एक अन्य Outlook संदेश को एंबेडेड संदेश के रूप में जोड़ता है।
निम्नलिखित कोड स्निपेट दिखाता है कि कैसे संदेश में दोनों प्रकार के अटैचमेंट जोड़ें।
MapiMessage message = new MapiMessage("from@test.com", "to@test.com", "Subj", "This is a message body");
// Add a regular attachment from a byte array
message.Attachments.Add("note.txt", File.ReadAllBytes(dataDir + "note.txt"));
// Add another Outlook message as an embedded message
MapiMessage attachMsg = MapiMessage.FromFile(dataDir + "Message.msg");
message.Attachments.Add("Weekly report.msg", attachMsg);
message.Save(dataDir + "WithAttachments_out.msg");
Try it out!
नि:शुल्क के साथ ईमेल अटैचमेंट्स जोड़ें या हटाएँ Aspose.Email Editor App.
MapiMessages में रेफ़रेंस अटैचमेंट्स जोड़ें
यह ReferenceAttachmentOptions क्लास सभी आवश्यक प्रॉपर्टीज़ को एक ही ऑब्जेक्ट में संलग्न करके रेफ़रेंस अटैचमेंट्स को जोड़ना सरल बनाती है।
ReferenceAttachmentOptions के पैरामीटर:
- sharedLink: फ़ाइल होस्ट करने वाली वेब सर्विस द्वारा प्रदान किया गया पूर्ण रूप से योग्य साझा लिंक।
- url: फ़ाइल स्थान या संसाधन URL。
- providerName: रेफ़रेंस अटैचमेंट प्रदाता का नाम (जैसे, Google Drive, Dropbox)।
- उदाहरण: ReferenceAttachmentOptions के साथ रेफ़रेंस अटैचमेंट जोड़ना
var options = new ReferenceAttachmentOptions(
"https://drive.google.com/file/d/1HJ-M3F2qq1oRrTZ2GZhUdErJNy2CT3DF/",
"https://drive.google.com/drive/my-drive",
"GoogleDrive");
// Add reference attachment
msg.Attachments.Add("Document.pdf", options);
संदेशों को अटैचमेंट्स के रूप में एम्बेड करें
निम्नलिखित कोड स्निपेट दर्शाता है कि MSG फ़ाइल अटैचमेंट को संदेश में कैसे एम्बेड किया जाए।
MapiMessage message = new MapiMessage("from@test.com", "to@test.com", "Subj", "This is a message body");
MapiMessage attachMsg = MapiMessage.FromFile(dataDir + "Message.msg");
message.Attachments.Add("Weekly report.msg", attachMsg);
message.Save(dataDir + "WithEmbeddedMsg_out.msg");
अटैचमेंट्स से एम्बेडेड संदेश पढ़ें
निम्न कोड स्निपेट दिखाता है कि अटैचमेंट्स से एम्बेडेड संदेश कैसे पढ़ें।
var message = MapiMessage.FromFile(fileName);
if (message.Attachments[0].ObjectData.IsOutlookMessage)
{
var getData = message.Attachments[0].ObjectData.ToMapiMessage();
}
अटैचमेंट डालना और बदलना
Aspose.Email API एक विशिष्ट इंडेक्स पर पैरेंट संदेश में अटैचमेंट डालने की क्षमता देता है। यह अटैचमेंट की सामग्री को दूसरे संदेश अटैचमेंट से बदलने की सुविधा भी देता है।
Try it out!
चलाएँ ReplaceAttach सरल ऐप प्रोजेक्ट, और Aspose.Email की क्षमताओं को आज़माएँ ताकि व्यावहारिक रूप से अटैचमेंट्स को बदल सकें।
विशिष्ट स्थानों पर अटैचमेंट्स डालें
Aspose.Email API के पास MapiAttachmentCollection की Insert मेथड (MapiAttachmentCollection Insert(int index, string name, MapiMessage msg)) का उपयोग करके एक पैरेंट MSG में MSG अटैचमेंट डालने की क्षमता है। निम्नलिखित कोड स्निपेट दर्शाता है कि कैसे एक अटैचमेंट को विशिष्ट स्थान पर डाला जाए।
var message = MapiMessage.FromFile(fileName);
var memoryStream = new MemoryStream();
message.Attachments[2].Save(memoryStream);
var getData = MapiMessage.FromStream(memoryStream);
message.Attachments.Insert(1, "new 11", getData);
अटैचमेंट सामग्री प्रतिस्थापित करें
यह Replace मेथड का उपयोग करके एम्बेडेड अटैचमेंट सामग्री को नई सामग्री से बदलने के लिए उपयोग किया जा सकता है। हालांकि, इसे PR_ATTACH_NUM = 4 (उदाहरण के लिए) वाले अटैचमेंट को collection.Count = 2 वाली कलेक्शन में डालने के लिए उपयोग नहीं किया जा सकता। नीचे दिया गया कोड स्निपेट आपको दिखाता है कि अटैचमेंट सामग्री कैसे बदली जाए।
var message = MapiMessage.FromFile(fileName);
var memoryStream = new MemoryStream();
message.Attachments[2].Save(memoryStream);
var getData = MapiMessage.FromStream(memoryStream);
message.Attachments.Replace(1, "new 1", getData);
MapiMessage में अटैचमेंट्स का नाम बदलें
MapiMessage अटैचमेंट्स में DisplayName प्रॉपर्टी वैल्यू को संपादित करना संभव है।
var msg = MapiMessage.Load(fileName);
msg.Attachments[0].DisplayName = "New display name 1";
msg.Attachments[1].DisplayName = "New display name 2";
डिजिटल रूप से साइन किए गए संदेशों से अटैचमेंट्स सहेजें
Aspose.Email API वह क्षमता प्रदान करता है जिससे आप यह मान प्राप्त या सेट कर सकते हैं कि क्लियर-साइन किए गए संदेश को डिकोड किया जाएगा या नहीं।
oledata.mso से एम्बेडेड OLE ऑब्जेक्ट्स निकालें
कभी‑कभी एम्बेडेड OLE डेटा को एक के रूप में दर्शाया जाता है oledata.mso अटैचमेंट एक में MapiAttachment और इन्हें मैन्युअल रूप से निकालना आवश्यक है। ये oledata.mso फ़ाइलें Microsoft Compound Document File (MCDF) स्वरूप में हैं, और ऐसी फ़ाइलों के समर्थन का दायरा Aspose.Email के बाहर है। हालांकि, Aspose.Email को अन्य ओपन‑सोर्स लाइब्रेरीज़ के साथ उपयोग किया जा सकता है, जैसे OpenMCDF, इन फ़ाइलों की सामग्री पढ़ने और डिस्क पर सहेजने के लिए। Aspose.Email प्रदान करता है InlineAttachmentExtractor क्लास MSO पैकेजों को बाइनरी डेटा से एन्हैंस करने के लिए oledata.mso, जिसे फिर सामग्री निकालने के लिए एक संयोजन‑फ़ाइल रीडिंग लाइब्रेरी को पास किया जा सकता है।
जब संदेश बॉडी प्रकार HTML हो (RTF नहीं) और संदेश में OLE ऑब्जेक्ट्स हों, तो MapiPropertyTag.PR_ATTACH_DATA_OBJ प्रॉपर्टी अनुपस्थित है। इस मामले में, OLE ऑब्जेक्ट्स की जानकारी इसमें सम्मिलित है oledata.mso.
Aspose.Email और OpenMCDF का उपयोग करके सामग्री निकालने के लिए:
- MSO पैकेजों को बाइनरी डेटा से एन्हैंस करें
oledata.msoअटैचमेंट। - प्रत्येक OLE आइटम के लिए, संयोजन फ़ाइल पढ़ें।
- स्ट्रीम को पढ़ें जिसका नाम है
CONTENTS. - सामग्री को एक में सहेजें
FileStream.
// The path to the File directory
string dataDir = RunExamples.GetDataDir_Email();
MapiMessage msg = MapiMessage.FromFile(dataDir + "double.msg");
foreach (MapiAttachment mapiAttachment in msg.Attachments)
{
if (mapiAttachment.LongFileName == "oledata.mso")
{
IDictionary<string, byte[]> oledata = InlineAttachmentExtractor.EnumerateMsoPackage(new MemoryStream(mapiAttachment.BinaryData));
int index = 0;
foreach (var oleItem in oledata)
{
// Using the OpenMCDF library
CompoundFile cf = new CompoundFile(new MemoryStream(oleItem.Value));
CFStream contents = cf.RootStorage.GetStream("CONTENTS");
using (FileStream fs = File.OpenWrite(index + ".pdf"))
{
byte[] data = contents.GetData();
fs.Write(data, 0, data.Length);
fs.Flush();
fs.Close();
}
index++;
}
}
}