Mengelola Lampiran dalam Pesan Outlook

The Membuat dan Menyimpan File Pesan Outlook (MSG) artikel menjelaskan langkah‑langkah dalam membuat dan menyimpan pesan, termasuk file MSG dengan lampiran. Artikel ini membahas manajemen lampiran Microsoft Outlook menggunakan Aspose.Email. Ini akan memandu Anda dalam mengakses dan menyimpan lampiran dari file pesan dengan memanfaatkan attachments properti dari MapiMessage kelas. Properti ini adalah koleksi yang dimiliki oleh MapiAttachmentCollection kelas, memungkinkan penanganan lampiran yang efisien.

Memeriksa Lampiran Inline vs Regular

"Inline" dan "Regular" lampiran merujuk pada cara mereka dimasukkan ke dalam pesan email. Lampiran Regular adalah file yang dilampirkan secara tradisional. Mereka biasanya ditampilkan dalam daftar di dalam klien email dan dapat diunduh oleh penerima serta disimpan ke penyimpanan lokal. Lampiran Inline, juga dikenal sebagai gambar tersemat atau inline, biasanya digunakan untuk menyertakan gambar atau media lain di dalam isi email. Mereka tidak ditampilkan dalam daftar terpisah, melainkan langsung muncul dalam konten email, seperti di badan email. Ini memungkinkan Anda menyertakan gambar atau media lain yang merupakan bagian dari konten pesan. Potongan kode di bawah ini memperlihatkan cara menentukan apakah sebuah lampiran bersifat inline atau regular:

import aspose.email as ae

msg = ae.mapi.MapiMessage.load("message.msg")

for attachment in msg.attachments:
    print(f"{attachment.display_name}:{attachment.is_inline}")

Mengidentifikasi Lampiran Referensi dalam Pesan MAPI

API Aspose.Email mencakup is_reference properti dari MapiAttachment kelas yang memungkinkan pengembang mengidentifikasi lampiran referensi dalam sebuah pesan. Coba contoh kode di bawah untuk melihat cara kerjanya dalam proyek python:

import aspose.email as ae

# Load or create a MapiMessage
msg = ae.mapi.MapiMessage.load("Message_With_Reference_Attachment.msg")

# Iterate through the attachments
for attachment in msg.attachments:
    if attachment.is_reference:
        # Process reference attachment
        pass

Menyimpan Lampiran dari File MSG

Untuk menyimpan lampiran dari file MSG:

  1. Iterasi melalui MapiAttachmentCollection koleksi dan ambil lampiran individu.
  2. Untuk menyimpan lampiran, panggil MapiAttachment kelas Save() metode.

Potongan kode berikut menunjukkan cara menyimpan lampiran ke disk lokal:

import aspose.email as ae

data_dir = "C://dataDir/"
file_name = "message.msg"

# Create an instance of MapiMessage from file
message = ae.mapi.MapiMessage.load(data_dir + file_name)

# Iterate through the attachments collection
for attachment in message.attachments:
    # Save the individual attachment
    attachment.save(data_dir + attachment.file_name)

Penanganan Lampiran TNEF

Muat dan Simpan Lampiran dalam Format TNEF

Aspose.Email menyediakan metode untuk menangani lampiran TNEF. Metode‑metode ini memungkinkan penyimpanan dan pemuatan lampiran dalam format TNEF, yang umum digunakan dalam pesan Outlook (winmail.dat).

Contoh kode berikut memperlihatkan cara mengekstrak, menyimpan, dan menambahkan kembali lampiran email berformat TNEF sambil mengelolanya melalui stream memori atau file:

import io
from aspose.email.mapi import MapiMessage, MapiAttachment

# Load the EML message (which contains a winmail.dat TNEF attachment)
msg = MapiMessage.load("message.eml")

# Save the first attachment as a winmail.dat file
msg.attachments[0].save_to_tnef("winmail.dat")

# Load the TNEF attachment from the file and add it back to the message
from_tnef_attachment = MapiAttachment.load_from_tnef("winmail.dat")
msg.attachments.add(from_tnef_attachment.long_file_name, from_tnef_attachment.binary_data)

# (Optional) If you also want to use a memory stream instead of the file
ms = io.BytesIO()
msg.attachments[0].save_to_tnef(ms)

# Reset the stream position to the beginning
ms.seek(0)

# Load the TNEF attachment directly from the memory stream and add it
from_tnef_attachment_from_stream = MapiAttachment.load_from_tnef(ms)
msg.attachments.add(from_tnef_attachment_from_stream.long_file_name, from_tnef_attachment_from_stream.binary_data)

Mengambil Lampiran Pesan Email Bersarang

Lampiran OLE (Object Linking and Embedding) yang tersemat juga muncul dalam koleksi lampiran dari MapiMessage kelas. Contoh kode di bawah ini menunjukkan cara mengurai file pesan dan mengekstrak lampiran pesan tersemat, kemudian menyimpannya ke disk untuk penggunaan lebih lanjut. MapiMessage kelas menawarkan sebuah from_properties metode statis untuk membuat pesan baru dari lampiran tersemat. Potongan kode berikut menunjukkan cara mendapatkan lampiran pesan email bersarang:

import aspose.email as ae

eml = ae.mapi.MapiMessage.load("my.msg")

# Create a MapiMessage object from the individual attachment
get_attachment = ae.mapi.MapiMessage.from_properties(eml.attachments[0].object_data.properties)

# Create an object of type MailMessageInterpreter from the above message and save the embedded message to a file on disk
mail_message = get_attachment.to_mail_message(ae.mapi.MailConversionOptions())
mail_message.save("NestedMailMessageAttachments_out.eml", ae.SaveOptions.default_eml)

Menghapus Lampiran

Pustaka Aspose.Email menyediakan fungsi untuk menghapus lampiran dari file Microsoft Outlook Message (.msg). Gunakan remove_attachments(path) metode yang memerlukan jalur file pesan sebagai parameternya. Sebagai metode statis publik, Anda dapat memanggilnya langsung tanpa perlu menginstansiasi objek, menjadikan prosesnya sederhana dan efisien.

Potongan kode berikut menunjukkan cara menghapus lampiran dari file MSG menggunakan Aspose.Email:

import aspose.email as ae

ae.mapi.MapiMessage.remove_attachments("AttachmentsToRemove_out.msg")

Anda juga dapat memanggil metode statis destroy_attachments dari MapiMessage kelas. Ini bekerja lebih cepat daripada remove_attachments karena metode remove_attachments mem-parsing file pesan.

import aspose.email as ae

# Destroy attachments in the MapiMessage
ae.mapi.MapiMessage.destroy_attachments("AttachmentsToDestroy_out.msg")

Menambahkan Lampiran MSG

Sebuah pesan Outlook dapat berisi pesan Microsoft Outlook lainnya sebagai lampiran, baik sebagai lampiran reguler maupun tersemat. MapiAttachmentCollection menyediakan anggota berlebih (overloaded) dari tambahkan metode untuk membuat pesan Outlook dengan kedua jenis lampiran.

Menambahkan Lampiran Referensi ke Pesan MAPI

Lampiran referensi biasanya mengacu pada lampiran yang berisi referensi atau tautan ke sumber eksternal daripada file sebenarnya. Referensi ini sering digunakan dalam email HTML untuk menautkan gambar atau sumber daya eksternal yang dihosting di server remote. Alih-alih menanamkan seluruh file, lampiran referensi menyertakan URL atau referensi ke konten eksternal.

Untuk menambahkan lampiran referensi ke pesan MAPI, gunakan add metode dari MapiAttachmentCollection class dan the ReferenceAttachmentOptions kelas untuk menentukan:

  • URL konten (tautan langsung ke file)

  • URL penyedia (tautan ke lokasi file atau tampilan UI)

  • Nama penyedia lampiran (misalnya, "GoogleDrive")

seperti yang ditunjukkan dalam contoh kode di bawah.

import aspose.email as ae

# Load or create a MapiMessage
msg = ae.mapi.MapiMessage()
msg.subject = "Email with Reference Attachment"
msg.body = "This message contains a cloud-based reference attachment."

# Create ReferenceAttachmentOptions
options = ae.mapi.ReferenceAttachmentOptions(
    "https://drive.google.com/file/d/1HJ-M3F2qq1oRrTZ2GZhUdErJNy2CT3DF/",
    "https://drive.google.com/drive/my-drive",
    "GoogleDrive"
)

# Add the reference attachment to the message
msg.attachments.add("Document.pdf", options)

# Save the message to MSG format
msg.save("Message_With_Reference_Attachment.msg")

Menyematkan Pesan sebagai Lampiran

Potongan kode berikut memperlihatkan cara menyematkan file Outlook MSG sebagai lampiran dalam file MSG lain. File MSG tersemat mencakup properti PR_ATTACH_METHOD dengan nilai 5, yang menunjukkan bahwa itu adalah lampiran tipe "message".

import aspose.email as ae

# Create a new MapiMessage
message = ae.mapi.MapiMessage("from@test.com", "to@test.com", "Subj", "This is a message body")

# Load the attachment message
attach_msg = ae.mapi.MapiMessage.load("Message.msg")

# Add the attachment to the message
message.attachments.add("Weekly report.msg", attach_msg)

# Save the message with the embedded message attachment
message.save("WithEmbeddedMsg_out.msg")

Membaca Pesan Tersemat dari Lampiran

Potongan kode berikut menunjukkan cara membaca pesan tersemat dari lampiran.

import aspose.email as ae

file_name = "path/to/file.msg"

# Load the MapiMessage from file
message = ae.mapi.MapiMessage.load(file_name)

# Check if the first attachment is an Outlook message
if message.attachments[0].object_data.is_outlook_message:
    # Get the embedded message as MapiMessage
    embedded_message = message.attachments[0].object_data.to_mapi_message()
    # Perform further operations with the embedded message
    # ...

Menyisip dan Mengganti Lampiran

API Aspose.Email menawarkan fungsi untuk menyisipkan lampiran pada indeks tertentu dalam pesan induk. Selain itu, ia menyediakan kemampuan untuk mengganti isi lampiran yang ada dengan lampiran pesan yang berbeda. Di bawah ini contoh kode yang menunjukkan cara melakukan penyisipan dan penggantian lampiran.

Menyisipkan Lampiran pada Lokasi Tertentu

API Aspose.Email memungkinkan Anda menyisipkan lampiran MSG ke dalam MSG induk menggunakan metode Insert dari MapiAttachmentCollection. Metode ini digunakan dengan tanda tangan MapiAttachmentCollection Insert(int index, string name, MapiMessage msg). Di bawah ini contoh kode yang menggambarkan cara menyisipkan lampiran pada lokasi tertentu:

import aspose.email as ae
from io import BytesIO

file_name = "path/to/file.msg"

# Load the MapiMessage from file
message = ae.mapi.MapiMessage.load(file_name)

# Save the attachment to a memory stream
memory_stream = BytesIO()
message.attachments[2].save(memory_stream)

# Load the attachment from the memory stream
get_data = ae.mapi.MapiMessage.load(memory_stream)

# Insert the loaded attachment at index 1
message.attachments.insert(1, "new 11", get_data)

Mengganti Isi Lampiran

Anda dapat menggunakan replace metode untuk memperbarui isi lampiran yang disematkan dengan data baru. Namun, perhatikan bahwa metode ini tidak dapat digunakan untuk menyisipkan lampiran dengan PR_ATTACH_NUM = 4 ke dalam koleksi yang hanya memuat 2 lampiran. Berikut ini cuplikan kode yang menunjukkan cara mengganti isi lampiran:

import aspose.email as ae
from io import BytesIO
file_name = "path/to/file.msg"

# Load the MapiMessage from file
message = ae.mapi.MapiMessage.load(file_name)

# Save the attachment to a memory stream
memory_stream = BytesIO()
message.attachments[2].save(memory_stream)

# Load the attachment from the memory stream
get_data = ae.mapi.MapiMessage.load(memory_stream)

# Replace the attachment at index 1 with the loaded attachment
message.attachments.replace(1, "new 1", get_data)

Mengganti Nama Lampiran dalam MapiMessages

Dengan Aspose.Email, Anda dapat dengan mudah mengubah nama tampilan lampiran dalam pesan email yang dimuat dari sebuah file. Contoh kode berikut memperlihatkan cara melakukannya:

import aspose.email as ae

msg = ae.mapi.MapiMessage.load("message.msg")

msg.attachments[0].display_name = "New display name 1"
msg.attachments[1].display_name = "New display name 2"