Mesaj Eklerini Yönetme
Outlook’ta Ekleri İşleme
Outlook Mesajı (MSG) Dosyaları Oluşturma ve Kaydetme mesajları oluşturma ve kaydetme, ayrıca ekli MSG dosyaları oluşturmayı açıklar. Bu makale Aspose.Email ile Microsoft Outlook eklerini nasıl yöneteceğinizi açıklar. Bir mesaj dosyasındaki ekler, … kullanılarak diske erişilir ve kaydedilir. the MapiMessage sınıf Ekler özelliği. Şu Ekler özellik, tip koleksiyonudur MapiAttachmentCollection sınıf.
Ek Türünü Kontrol Et (Satır İçi veya Normal)
Satır içi ve normal ekler farklı amaçlara hizmet eder. Satır içi ekler e-posta mesajına görsel olarak entegre edilir ve tipik olarak resim veya medya dosyalarıdır. Öte yandan, normal ekler e-postaya eklenen ayrı dosyalardır ve çeşitli dosya tiplerini içerebilir. The MapiAttachment.IsInline özellik MapiAttachment sınıf, ekin satır içi mi yoksa normal mi olduğunu gösteren bir değer alır.
Aşağıdaki kod örneği yüklü MapiMessage içindeki her ek hakkında bilgileri çıkarır ve görüntüler; eklerin gösterim adları ve satır içi (inline) olup olmadıkları da dahil.
var message = MapiMessage.Load(fileName);
foreach (var attach in message.Attachments)
{
Console.WriteLine($"{attach.DisplayName} : {attach.IsInline}");
}
Ek Türünü Kontrol Et (IsReference)
Bu MapiAttachment sınıf şunları içerir: IsReference mesaj içinde referans eklerini tanımlamayı sağlayan özellik. Aşağıdaki kod örneğiyle bir ekin referans ek olup olmadığını kontrol edebilirsiniz:
foreach (var attachment in msg.Attachments)
{
if (attachment.IsReference)
{
// Process reference attachment
}
}
MSG Dosyalarından Ekleri Kaydet
Bir MSG dosyasından ekleri kaydetmek için:
- İçinde döngü yap MapiAttachmentCollection koleksiyon ve bireysel ekleri alın.
- Ekleri kaydetmek için MapiAttachment sınıfının Save() metodunu çağırın.
Aşağıdaki kod örneği ekleri yerel diske nasıl kaydedeceğinizi gösterir.
// 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 Biçimli MSG Dosyalarından Ekleri Çıkar
RTF formatında olan mesajlar için aşağıdaki kod, eklerin satır içi mi yoksa mesaj gövdesinde simge olarak mı göründüğünü ayırt etmek ve çıkarmak için kullanılabilir. Aşağıdaki kod örneği, RTF formatında bir MSG dosyasından gömülü bir eki tanımlama ve çıkarmayı gösterir.
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);
}
}
}
İç İçe Mail Mesajı Eklerini Al
Gömülü OLE ekleri de … içinde görünür. MapiMessage Attachment sınıfı koleksiyonu. Aşağıdaki kod örneği bir mesaj dosyasını gömülü mesaj ekleri için ayrıştırır ve diske kaydeder. The MapiMessage FromProperties() sınıfının statik yöntemi gömülü ekten yeni bir mesaj oluşturabilir. Aşağıdaki kod örneği iç içe posta mesajı eklerini nasıl alacağınızı gösterir.
// 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);
Ekleri Kaldır
Aspose Outlook kütüphanesi, Microsoft Outlook Message (.msg) dosyalarından ekleri kaldırma işlevselliği sağlar:
- RemoveAttachments() metodunu çağırın. Parametre olarak mesaj dosyasının yolunu alır. Bu metod, public static bir metod olarak uygulanmıştır, bu yüzden nesne oluşturmanıza gerek yoktur.
Aşağıdaki kod parçacığı ekleri nasıl kaldıracağınızı gösterir.
MapiMessage.RemoveAttachments(dataDir + "AttachmentsToRemove_out.msg");
Ayrıca …‘ı çağırabilirsiniz MapiMessage sınıf statik yöntemi DestroyAttachments(). RemoveAttachments()‘den daha hızlı çalışır, çünkü RemoveAttachments() yöntemi mesaj dosyasını ayrıştırır.
MapiMessage.DestroyAttachments(dataDir + "AttachmentsToDestroy_out.msg");
MSG Ekleri Ekle
Outlook mesajı, eklerde başka Microsoft Outlook mesajlarını normal veya gömülü olarak içerebilir. The MapiAttachmentCollection aşağıdakinin aşırı yüklü üyelerini sağlar: Ekle her iki ek tipini de içeren Outlook mesajları oluşturmak için yöntem:
Add(string name, byte[] data)– bir bayt dizisinden normal bir ek ekler.Add(string name, MapiMessage message)– bir Outlook mesajını gömülü mesaj olarak ekler.
Aşağıdaki kod parçacığı, bir mesaja her iki ek tipini de nasıl ekleyeceğinizi gösterir.
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");
Deneyin!
Ücretsiz … ile e-posta eklerini ekleyin veya kaldırın Aspose.Email Editor App.
MapiMessage’lara Referans Eklerini Ekle
Bu ReferenceAttachmentOptions sınıf, tüm gerekli özellikleri tek bir nesnede kapsülleyerek referans eklerinin eklenmesini basitleştirir.
ReferenceAttachmentOptions Parametreleri:
- sharedLink: dosyayı barındıran web hizmeti tarafından sağlanan tam nitelikli paylaşımlı bağlantı.
- url: dosya konumu veya kaynak URL’si.
- providerName: referans ek sağlayıcısının adı (ör. Google Drive, Dropbox).
- Örnek: ReferenceAttachmentOptions ile Referans Eki Eklemek
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);
Mesajları Ek Olarak Göm
Aşağıdaki kod örneği bir MSG dosyası ekini bir mesaja nasıl gömeceğinizi gösterir.
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");
Eklerden Gömülü Mesajları Okuma
Aşağıdaki kod parçacığı, eklerden gömülü mesajları nasıl okuyacağınızı gösterir.
var message = MapiMessage.FromFile(fileName);
if (message.Attachments[0].ObjectData.IsOutlookMessage)
{
var getData = message.Attachments[0].ObjectData.ToMapiMessage();
}
Ek Ekleme ve Değiştirme
Aspose.Email API, ekleri üst mesajda belirli bir indeksde ekleme yeteneği sağlar. Ayrıca bir ekin içeriğini başka bir mesaj ekiyle değiştirme imkanı sunar.
Deneyin!
Şunu çalıştırın: ReplaceAttach basit bir uygulama projesi ve Aspose.Email yeteneklerini kullanarak ekleri eylem içinde değiştirmeyi deneyin.
Ekleri Belirli Konumlara Ekle
Aspose.Email API, MapiAttachmentCollection’ın Insert yöntemi (MapiAttachmentCollection Insert(int index, string name, MapiMessage msg)) kullanarak bir MSG ekini bir üst MSG’ye ekleme yeteneği sağlar. Aşağıdaki kod örneği belirli bir konuma ek nasıl ekleyeceğinizi gösterir.
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);
Ek İçeriklerini Değiştir
Bu, Replace metodu kullanılarak gömülü ek içeriklerini yenileriyle değiştirmek için kullanılabilir. Ancak, PR_ATTACH_NUM = 4 (örneğin) olan bir eki, koleksiyon.Count = 2 iken eklemeye yarmaz. Aşağıdaki kod parçacığı, ek içeriklerini nasıl değiştireceğinizi gösterir.
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 İçindeki Ekleri Yeniden Adlandır
MapiMessage eklerinde DisplayName özelliği değerini düzenlemek mümkündür.
var msg = MapiMessage.Load(fileName);
msg.Attachments[0].DisplayName = "New display name 1";
msg.Attachments[1].DisplayName = "New display name 2";
Dijital Olarak İmzalı Mesajlardan Ekleri Kaydet
Aspose.Email API, temiz imzalı bir mesajın çözüleceğini gösteren bir değeri alıp ayarlama yeteneği sağlar.
oledata.mso içindeki Gömülü OLE Nesnelerini Çıkar
Bazen gömülü OLE verileri bir oledata.mso bir ek içinde MapiAttachment ve manuel olarak çıkartılması gerekir. Bu oledata.mso dosyaları Microsoft Compound Document File (MCDF) formatındadır ve bu dosyalar için destek Aspose.Email kapsamının dışındadır. Ancak Aspose.Email, aşağıdaki gibi açık kaynaklı kütüphanelerle birlikte kullanılabilir: OpenMCDF, bu dosyaların içeriğini okuyup diske kaydetmek için. Aspose.Email InlineAttachmentExtractor ikili verideki MSO paketlerini yinelemek için sınıf oledata.mso, ardından içerik çıkarmak için bir birleşik dosya okuma kitaplığına aktarılabilir.
Bir mesaj gövdesi türü HTML (RTF değil) olduğunda ve mesajda OLE nesneleri bulunduğunda, MapiPropertyTag.PR_ATTACH_DATA_OBJ özellik eksik. Bu durumda OLE nesneleri hakkındaki bilgi şu yerde bulunur: oledata.mso.
Aspose.Email ve OpenMCDF kullanarak içerikleri çıkarmak için:
- MSO paketlerini ikili veriden şu şekilde yineleyin:
oledata.msoek. - Her OLE öğesi için birleşik dosyayı okuyun.
- Akışı şu adla oku:
CONTENTS. - İçeriği bir
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++;
}
}
}