ניהול קבצים מצורפים להודעה
ניהול קבצים מצורפים ב‑Outlook
יצירת ושמירת קבצי הודעות Outlook (MSG) מסביר כיצד ליצור ולשמור הודעות, וכיצד ליצור קבצי MSG עם קבצים מצורפים. מאמר זה מסביר כיצד לנהל קבצים מצורפים של Microsoft Outlook עם Aspose.Email. קבצים מצורפים מקובץ הודעה ניגשים אליהם ונשמרים לכונן באמצעות ה‑ 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 אוסף וקבלו את הקבצים המצורפים האישיים.
- כדי לשמור את הקבצים המצורפים, קרא למתודה Save() של מחלקת MapiAttachment.
קוד המקטע הבא מראה כיצד לשמור קבצים מצורפים לכונן המקומי.
// 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);
}
חלץ קבצים מצורפים מקבצי MSG בפורמט RTF
להודעות המוּפַּרְמָטוֹת כ‑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 מחלקת אוסף Attachment. דוגמת הקוד הבאה מפענחת קובץ הודעה עבור קבצים מצורפים משובצים ושומרת אותו לכונן. 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 מספקת חברים מעודפים של ה- הוסף מתודה ליצירת הודעות 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");
נסו זאת!
הוספה או הסרה של קבצים מצורפים של דוא"ל באמצעות החינמי 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 מספקת אפשרות להכניס קבצים מצורפים במיקום אינדקס ספציפי בהודעה האב. היא גם מספקת אפשרות להחליף את תוכן הקובץ המצורף בקובץ מצורף הודעה אחר.
נסו זאת!
הפעל את ה‑ ReplaceAttach פרויקט אפליקציה פשוט, ולנסות את יכולות Aspose.Email להחלפת קבצים מצורפים בפעולה.
הוספת קבצים מצורפים במקומות ספציפיים
ממשק Aspose.Email API מספק אפשרות להכניס קובץ מצורף MSG ל‑MSG הורה באמצעות מתודת Insert של MapiAttachmentCollection – MapiAttachmentCollection Insert(int index, string name, MapiMessage 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
ניתן לערוך את ערך המאפיין DisplayName בקבצים מצורפים של MapiMessage.
var msg = MapiMessage.Load(fileName);
msg.Attachments[0].DisplayName = "New display name 1";
msg.Attachments[1].DisplayName = "New display name 2";
שמירת קבצים מצורפים מהודעות חתומות דיגיטלית
Aspose.Email API מספקת אפשרות לקבל או להגדיר ערך המציין האם הודעה חותמת (clear‑signed) תפוענח.
חלץ אובייקטי OLE משולבים מ‑oledata.mso
לעיתים נתוני 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++;
}
}
}