Mengelola Lampiran Pesan
Menangani Lampiran di Outlook
Membuat dan Menyimpan File Pesan Outlook (MSG) menjelaskan cara membuat dan menyimpan pesan, serta cara membuat file MSG dengan lampiran. Artikel ini menjelaskan cara mengelola lampiran Microsoft Outlook dengan Aspose.Email. Lampiran dari file pesan diakses dan disimpan ke disk menggunakan the MapiMessage kelas Lampiran properti. The Lampiran properti adalah koleksi tipe MapiAttachmentCollection kelas.
Periksa Jenis Lampiran (Inline atau Reguler)
Lampiran inline dan lampiran reguler melayani tujuan yang berbeda. Lampiran inline terintegrasi secara visual ke dalam pesan email dan biasanya berupa gambar atau file media. Sementara itu, lampiran reguler adalah file terpisah yang dilampirkan pada email dan dapat mencakup berbagai jenis file. The MapiAttachment.IsInline properti dari MapiAttachment kelas mendapatkan nilai yang menunjukkan apakah lampiran adalah inline atau reguler.
Contoh kode berikut mengekstrak dan menampilkan informasi tentang setiap lampiran dalam MapiMessage yang dimuat, termasuk nama tampilan mereka dan apakah mereka merupakan lampiran inline atau tidak.
var message = MapiMessage.Load(fileName);
foreach (var attach in message.Attachments)
{
Console.WriteLine($"{attach.DisplayName} : {attach.IsInline}");
}
Periksa Jenis Lampiran (IsReference)
The MapiAttachment kelas mencakup IsReference properti yang memungkinkan pengembang mengidentifikasi lampiran referensi dalam sebuah pesan. Dengan contoh kode berikut, Anda dapat memeriksa apakah sebuah lampiran adalah lampiran referensi:
foreach (var attachment in msg.Attachments)
{
if (attachment.IsReference)
{
// Process reference attachment
}
}
Menyimpan Lampiran dari File MSG
Untuk menyimpan lampiran dari file MSG:
- Iterasi melalui MapiAttachmentCollection koleksi dan ambil lampiran individu.
- Untuk menyimpan lampiran, panggil metode Save() pada kelas MapiAttachment.
Cuplikan kode berikut menunjukkan cara menyimpan lampiran ke disk lokal.
// 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);
}
Ekstrak Lampiran dari File MSG Berformat RTF
Untuk pesan yang diformat sebagai RTF, kode berikut dapat digunakan untuk membedakan dan mengekstrak lampiran yang berupa Inline atau muncul sebagai Ikon dalam badan pesan. Cuplikan kode berikut menunjukkan cara Mengidentifikasi dan Mengekstrak lampiran tertanam dari MSG yang diformat sebagai 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);
}
}
}
Dapatkan Lampiran Pesan Email Bersarang
Lampiran OLE tertanam juga muncul di the MapiMessage kelas koleksi Attachment. Contoh kode berikut mem-parsing file pesan untuk lampiran pesan yang tertanam dan menyimpannya ke disk. The MapiMessage metode statis class FromProperties() dapat membuat pesan baru dari lampiran yang tertanam. Cuplikan kode berikut menunjukkan cara mendapatkan lampiran pesan email bersarang.
// 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);
Menghapus Lampiran
Perpustakaan Aspose Outlook menyediakan fungsionalitas untuk menghapus lampiran dari file Microsoft Outlook Message (.msg):
- Panggil metode RemoveAttachments(). Metode ini menerima path file pesan sebagai parameter. Ia diimplementasikan sebagai metode statis publik, sehingga Anda tidak perlu membuat instance objek.
Potongan kode berikut menunjukkan cara menghapus lampiran.
MapiMessage.RemoveAttachments(dataDir + "AttachmentsToRemove_out.msg");
Anda juga dapat memanggil the MapiMessage metode statis kelas DestroyAttachments(). Metode ini lebih cepat daripada RemoveAttachments(), karena metode RemoveAttachments() mem-parsing file pesan.
MapiMessage.DestroyAttachments(dataDir + "AttachmentsToDestroy_out.msg");
Menambahkan Lampiran MSG
Pesan Outlook dapat berisi pesan Microsoft Outlook lain dalam lampiran baik sebagai pesan reguler maupun tertanam. The MapiAttachmentCollection menyediakan anggota berlebih (overloaded) dari Tambah metode untuk membuat pesan Outlook dengan kedua jenis lampiran:
Add(string name, byte[] data)– menambahkan lampiran reguler dari array byte.Add(string name, MapiMessage message)– menambahkan pesan Outlook lain sebagai pesan tersemat.
Potongan kode berikut menunjukkan cara menambahkan kedua jenis lampiran ke sebuah pesan.
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");
Coba sekarang!
Tambahkan atau hapus lampiran email dengan yang gratis Aspose.Email Editor App.
Tambahkan Lampiran Referensi ke MapiMessages
The ReferenceAttachmentOptions kelas menyederhanakan penambahan lampiran referensi dengan mengenkapsulasi semua properti yang diperlukan dalam satu objek.
Parameter dari ReferenceAttachmentOptions:
- sharedLink: Tautan berbagi lengkap ke lampiran yang disediakan oleh layanan web hosting file.
- url: Lokasi file atau URL sumber daya.
- providerName: Nama penyedia lampiran referensi (mis., Google Drive, Dropbox).
- Contoh: Menambahkan Lampiran Referensi dengan 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);
Menyematkan Pesan sebagai Lampiran
Cuplikan kode berikut menunjukkan cara menyematkan lampiran file MSG ke dalam pesan.
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");
Membaca Pesan Tersemat dari Lampiran
Potongan kode berikut menunjukkan cara membaca pesan tersemat dari lampiran.
var message = MapiMessage.FromFile(fileName);
if (message.Attachments[0].ObjectData.IsOutlookMessage)
{
var getData = message.Attachments[0].ObjectData.ToMapiMessage();
}
Menyisipkan dan Mengganti Lampiran
Aspose.Email API menyediakan kemampuan untuk menyisipkan lampiran pada indeks tertentu di pesan induk. Ini juga menyediakan fasilitas untuk mengganti konten lampiran dengan lampiran pesan lain.
Coba sekarang!
Jalankan ReplaceAttach proyek aplikasi sederhana, dan coba kemampuan Aspose.Email untuk mengganti lampiran secara langsung.
Menyisipkan Lampiran pada Lokasi Tertentu
API Aspose.Email menyediakan kemampuan untuk menyisipkan lampiran MSG ke MSG induk menggunakan metode Insert pada MapiAttachmentCollection MapiAttachmentCollection Insert(int index, string name, MapiMessage msg). Cuplikan kode berikut menunjukkan cara menyisipkan lampiran pada lokasi tertentu.
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);
Mengganti Isi Lampiran
Ini dapat digunakan untuk mengganti konten lampiran tersemat dengan yang baru menggunakan metode Replace. Namun, tidak dapat digunakan untuk menyisipkan lampiran dengan PR_ATTACH_NUM = 4 (misalnya) ke dalam koleksi dengan collection.Count = 2. Potongan kode berikut menunjukkan cara mengganti konten lampiran.
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);
Ganti Nama Lampiran di MapiMessage
Dimungkinkan untuk mengedit nilai properti DisplayName pada lampiran MapiMessage.
var msg = MapiMessage.Load(fileName);
msg.Attachments[0].DisplayName = "New display name 1";
msg.Attachments[1].DisplayName = "New display name 2";
Simpan Lampiran dari Pesan yang Ditandatangani Secara Digital
Aspose.Email API menyediakan kemampuan untuk mendapatkan atau mengatur nilai yang menunjukkan apakah pesan yang ditandatangani jelas akan didekode.
Ekstrak Objek OLE yang Disematkan dari oledata.mso
Kadang data OLE yang disematkan direpresentasikan sebagai sebuah oledata.mso lampiran dalam sebuah MapiAttachment dan perlu diekstrak secara manual. Ini oledata.mso file berada dalam format Microsoft Compound Document File (MCDF), dan dukungan untuk file tersebut berada di luar cakupan Aspose.Email. Namun, Aspose.Email dapat digunakan bersama pustaka sumber terbuka lainnya, seperti OpenMCDF, untuk membaca isi file tersebut dan menyimpannya ke disk. Aspose.Email menyediakan InlineAttachmentExtractor kelas untuk mengenumerasi paket MSO yang terdapat dalam data biner oledata.mso, yang kemudian dapat diteruskan ke perpustakaan pembaca file komposit untuk ekstraksi konten.
Ketika tipe isi pesan HTML (bukan RTF) dan ada objek OLE dalam pesan, MapiPropertyTag.PR_ATTACH_DATA_OBJ properti tidak ada. Dalam kasus ini, informasi tentang objek OLE terdapat dalam oledata.mso.
Untuk mengekstrak konten menggunakan Aspose.Email dan OpenMCDF:
- Enumerasi paket MSO dari data biner
oledata.msolampiran. - Untuk setiap item OLE, baca file komposit.
- Baca stream bernama
CONTENTS. - Simpan konten ke sebuah
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++;
}
}
}