Bekerja dengan Lampiran dan Objek Tersemat

Mengelola Lampiran Email

Lampiran email adalah file yang dikirim bersama pesan email. File tersebut dapat dikirim sebagai pesan terpisah maupun sebagai bagian dari pesan yang dilampirkannya. The Attachment kelas digunakan dengan MailMessage kelas. Semua pesan menyertakan body. Selain body, Anda mungkin ingin mengirim file tambahan. File ini dikirim sebagai lampiran dan direpresentasikan sebagai sebuah instance dari Attachment kelas. Anda dapat mengirim sejumlah lampiran, tetapi ukuran lampiran dibatasi oleh server email. Gmail, misalnya, tidak mendukung ukuran file lebih dari 10 MB.

Menambahkan Lampiran

Untuk melampirkan sebuah lampiran ke email, silakan ikuti langkah-langkah berikut:

  1. Buat sebuah instansi dari MailMessage kelas.
  2. Buat sebuah instansi dari Attachment kelas.
  3. Muat lampiran ke dalam Attachment instance.
  4. Tambahkan Attachment instance ke dalam MailMessage instance.

Potongan kode berikut menunjukkan cara menambahkan lampiran ke email.

// Create an instance of MailMessage class
MailMessage message = new MailMessage();
message.setFrom(new MailAddress("sender@from.com"));
message.getTo().add("receiver@to.com");
message.setSubject("This is message");
message.setBody("This is body");

// Load an attachment
Attachment attachment = new Attachment("1.txt");

// Add Multiple Attachment in instance of MailMessage class and Save message to disk
message.getAttachments().addItem(attachment);
message.addAttachment(new Attachment("1.jpg"));
message.addAttachment(new Attachment("1.doc"));
message.addAttachment(new Attachment("1.rar"));
message.addAttachment(new Attachment("1.pdf"));
message.save("AddAttachments.eml");

Di atas, kami menjelaskan cara menambahkan lampiran ke pesan email Anda dengan Aspose.Email. Berikutnya menunjukkan cara menghapus lampiran, dan menampilkan informasi tentangnya di layar.

Menghapus Lampiran

Untuk menghapus lampiran, ikuti langkah-langkah berikut:

Potongan kode berikut menunjukkan cara menghapus lampiran.

// Create an instance of MailMessage class
MailMessage eml = new MailMessage();
eml.setFrom(new MailAddress("sender@from.com"));
eml.getTo().add("receiver@to.com");

// Load an attachment
Attachment attachment = new Attachment("1.txt");
eml.getAttachments().addItem(attachment);

// Remove attachment from your MailMessage
eml.getAttachments().removeItem(attachment);

Menampilkan Nama File Lampiran

Untuk menampilkan nama file lampiran, ikuti langkah-langkah berikut:

  1. Iterasi melalui lampiran dalam pesan email dan
    1. Simpan setiap lampiran.
    2. Tampilkan setiap nama lampiran di layar.

Potongan kode berikut menunjukkan cara menampilkan nama file lampiran di layar.

MailMessage eml = MailMessage.load("Attachments.eml");

for (Attachment attachment : eml.getAttachments()) {
    // Display the attachment file name
    System.out.println(attachment.getName());
}

Mengekstrak Lampiran Email

Topik ini menjelaskan cara mengekstrak lampiran dari file email. Lampiran email adalah file yang dikirim bersama dengan pesan email. File tersebut dapat dikirim sebagai pesan terpisah maupun sebagai bagian dari pesan yang dilampirkannya. Semua pesan email menyertakan opsi untuk mengirim file tambahan. File-file ini dikirim sebagai lampiran dan direpresentasikan sebagai instance dari Attachment kelas. The Attachment kelas digunakan dengan MailMessage kelas untuk bekerja dengan lampiran. Untuk mengekstrak lampiran dari pesan email, ikuti langkah-langkah berikut:

  • Buat sebuah instansi dari MailMessage kelas.
  • Muat file email ke dalam MailMessage instance.
  • Buat sebuah instansi dari Attachment kelas dan gunakan dalam loop untuk mengekstrak semua lampiran.
  • Simpan lampiran dan tampilkan di layar.

|Lampiran yang diekstrak dalam email| | :- | |todo:image_alt_text| Potongan kode berikut menunjukkan cara Mengekstrak Lampiran Email.

MailMessage eml = MailMessage.load("Message.eml", new MsgLoadOptions());

for (Attachment attachment : eml.getAttachments()) {
    attachment.save("MessageEmbedded_out.eml");
    System.out.println(attachment.getName());
}

Mengambil Content-Description dari Lampiran

API Aspose.Email menyediakan kemampuan untuk membaca Content-Description lampiran dari header lampiran. Potongan kode berikut menunjukkan cara mengambil deskripsi konten dari lampiran.

MailMessage eml = MailMessage.load("EmailWithAttachEmbedded.eml");
System.out.println(eml.getAttachments().get_Item(0).getHeaders().get_Item("Content-Description"));

Menentukan apakah Lampiran adalah Pesan Tertanam

Potongan kode berikut menunjukkan cara menentukan apakah lampiran adalah pesan tertanam atau tidak.

MailMessage eml = MailMessage.load("EmailWithAttachEmbedded.eml");

System.out.println(eml.getAttachments().get_Item(0).isEmbeddedMessage()
        ? "Attachment is an embedded message."
        : "Attachment isn't an embedded message.");

Menentukan Lampiran Berformat TNEF

The Attachment.isTnef properti dari API Aspose.Email Java menunjukkan apakah lampiran pesan berformat TNEF.

Potongan kode berikut menunjukkan cara menentukan apakah sebuah lampiran berformat TNEF:

MailMessage eml = MailMessage.load(fileName);

for (Attachment attachment : eml.getAttachments()) {
    System.out.println("Is Attachment TNEF?: " + attachment.isTnef());
}

Muat dan Simpan Lampiran TNEF

Aspose.Email for Java menyediakan metode dalam MapiAttachment kelas untuk melakukan operasi berikut:

Muat dari TNEF

  • static MapiAttachment loadFromTnef(String fileName) – Memuat lampiran dari file TNEF.

  • static MapiAttachment loadFromTnef(InputStream stream) – Memuat lampiran dari aliran TNEF.

Simpan ke TNEF

  • void saveToTnef(String fileName) – Menyimpan lampiran ke file TNEF.

  • void saveToTnef(OutputStream stream) – Menyimpan lampiran ke aliran TNEF.

Contoh kode berikut menunjukkan cara mengekstrak lampiran TNEF dari sebuah pesan, menyimpannya ke aliran atau file, dan kemudian memuatnya kembali ke dalam pesan sebagai MapiAttachment:

// Load message containing a TNEF attachment (winmail.dat)
MapiMessage msg = MapiMessage.load("message.eml");

// Save the first attachment to a TNEF stream
ByteArrayOutputStream bos = new ByteArrayOutputStream();
msg.getAttachments().get(0).saveToTnef(bos);

// Load attachment back from the TNEF stream
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
MapiAttachment fromtnefAttachment = MapiAttachment.loadFromTnef(bis);
msg.getAttachments().addMapiAttachment(fromtnefAttachment);

// Load TNEF attachment directly from a file
fromtnefAttachment = MapiAttachment.loadFromTnef("winmail.dat");
msg.getAttachments().addMapiAttachment(fromtnefAttachment);

Mengekstrak URI Lampiran jika Lampiran berupa URI-attachment

Potongan kode berikut menunjukkan cara mengekstrak URI Lampiran.

MailMessage eml = MailMessage.load("fileName");

Attachment attachment = eml.getAttachments().get_Item(0);
if (attachment.isUri()) {
    InputStream inputStream = attachment.getContentStream();
    String uri = new String(IOUtils.toByteArray(inputStream), Charset.forName("utf-8"));
    System.out.println("Attachment URI: " + uri);
}

Menambahkan Lampiran Referensi

Lampiran referensi adalah alternatif untuk lampiran file lokal. Dalam beberapa kasus, lampiran referensi mungkin lebih disukai, misalnya, jika Anda ingin mengelola aksesnya. Kelas-kelas di bawah ini digunakan untuk mengelola dan memanipulasi pesan email serta lampirannya:

Contoh kode berikut menunjukkan cara memuat pesan email dari file, membuat lampiran referensi dengan properti tertentu, dan menambahkan lampiran ke pesan email:

MailMessage eml = MailMessage.load("fileName");

ReferenceAttachment refAttach = new ReferenceAttachment("https://[attach_uri]")
refAttach.setName("Document.docx");
refAttach.setProviderType(AttachmentProviderType.OneDrivePro);
refAttach.setPermissionType(AttachmentPermissionType.AnyoneCanEdit);

eml.getAttachments().addItem(refAttach);

Bekerja dengan Objek Tertanam

Objek tertanam adalah objek yang dibuat dengan satu aplikasi dan disertakan di dalam dokumen atau file yang dibuat oleh aplikasi lain. Sebagai contoh, spreadsheet Microsoft Excel dapat ditanamkan ke dalam laporan Microsoft Word, atau file video dapat ditanamkan ke dalam presentasi Microsoft PowerPoint. Ketika sebuah file ditanamkan, bukan disisipkan atau ditempelkan ke dokumen lain, ia mempertahankan format aslinya. Dokumen tertanam dapat dibuka di aplikasi asal dan dimodifikasi.

Menanamkan Objek ke dalam Email

The LinkedResource kelas digunakan dengan MailMessage kelas untuk menanamkan objek dalam pesan email Anda. Untuk menambahkan objek tertanam, ikuti langkah-langkah berikut

  1. Buat sebuah instansi dari MailMessage kelas.
  2. Tentukan nilai from, to, dan subject dalam MailMessage instance.
  3. Buat sebuah instansi dari AlternateView kelas.
  4. Buat sebuah instansi dari LinkedResource kelas.
  5. Muat objek tertanam ke dalam LinkedResourceCollection.
  6. Tambahkan objek tertanam yang dimuat ke dalam MailMessage instance kelas.
  7. Tambahkan AlternateView instance ke MailMessage instance kelas.

Potongan kode di bawah menghasilkan pesan email dengan tubuh teks biasa dan HTML serta gambar yang tertanam dalam HTML

|Gambar tertanam dalam email| | :- | |todo:image_alt_text| Anda dapat mengirim sejumlah objek tertanam. Ukuran lampiran dibatasi oleh server email. Gmail, misalnya, tidak mendukung ukuran file lebih dari 10MB. Potongan kode di bawah ini menunjukkan cara menanamkan objek ke dalam Email.

// Create an instance of the MailMessage class and Set the addresses and Set the content
MailMessage mail = new MailMessage();
mail.setFrom(new MailAddress("sender@from.com"));
mail.getTo().add("receiver@to.com");
mail.setSubject("This is an email");

// Create the plain text part It is viewable by those clients that don't support HTML
AlternateView plainView = AlternateView.createAlternateViewFromString("This is my plain text content", null, "text/plain");

// Create the HTML part.To embed images, we need to use the prefix 'cid' in the img src value. 
// The cid value will map to the Content-Id of a Linked resource. 
// Thus <img src='cid:barcode'> will map to a LinkedResource with a ContentId of //'barcode'.
AlternateView htmlView = AlternateView.createAlternateViewFromString("Here is an embedded image.<img src=cid:barcode>", null, "text/html");

// Create the LinkedResource (embedded image) and Add the LinkedResource to the appropriate view
LinkedResource barcode = new LinkedResource("1.jpg", MediaTypeNames.Image.JPEG);
barcode.setContentId("barcode");

mail.getLinkedResources().addItem(barcode);
mail.getAlternateViews().addItem(plainView);
mail.getAlternateViews().addItem(htmlView);
mail.save("EmbeddedImage_out.msg", SaveOptions.getDefaultMsgUnicode());

Menghapus Objek Tertanam dari Email

LinkedResourceCollection diakses melalui MailMessage.LinkedResources properti. The LinkedResourceCollection koleksi menyediakan metode untuk sepenuhnya menghapus objek tertanam yang ditambahkan ke dalam pesan email. Gunakan versi overload dari LinkedResourceCollection.removeAt metode untuk menghapus semua jejak objek tertanam dari pesan email.

Kode contoh di bawah ini menunjukkan cara menghapus objek tertanam dari pesan email.

// Load the test message with Linked Resources
MailMessage msg = MailMessage.load("EmlWithLinkedResources.eml");

// Remove a LinkedResource
msg.getLinkedResources().removeAt(0, true);

// Now clear the Alternate View for linked Resources
msg.getAlternateViews().get_Item(0).getLinkedResources().clear(true);

Mengekstrak Objek Tertanam

Topik ini menjelaskan cara mengekstrak objek tertanam dari file email. Objek tertanam adalah objek yang dibuat dengan satu aplikasi dan disertakan di dalam dokumen atau file yang dibuat oleh aplikasi lain. Sebagai contoh, spreadsheet Microsoft Excel dapat ditanamkan ke dalam laporan Microsoft Word, atau file video dapat ditanamkan ke dalam presentasi Microsoft PowerPoint. Ketika sebuah file ditanamkan, bukan disisipkan atau ditempelkan ke dokumen lain, ia mempertahankan format aslinya. Dokumen tertanam dapat dibuka di aplikasi asal dan dimodifikasi. Untuk mengekstrak objek tertanam dari pesan email, ikuti langkah-langkah berikut:

  1. Buat sebuah instansi dari MailMessage kelas.
  2. Muat file email dalam MailMessage instance.
  3. Buat loop dan buat instance dari Attachment kelas di dalamnya.
  4. Simpan lampiran dan tampilkan di layar.
  5. Tentukan alamat pengirim dan penerima dalam MailMessage instance.
  6. Kirim email menggunakan SmtpClient kelas.

Cuplikan kode di bawah ini mengekstrak objek tersemat dari email.

|Objek tersemat yang diekstrak dalam email| | :- | |todo:image_alt_text| Cuplikan kode berikut menunjukkan cara mengekstrak objek tersemat.

MailMessage mailMsg = MailMessage.load("Message.msg", new MsgLoadOptions());

for (Attachment attachment : mailMsg.getAttachments()) {
    attachment.save("MessageEmbedded_out.msg");
    System.out.println(attachment.getName());
}

Mengidentifikasi dan Mengekstrak Lampiran Tersemat dari MSG yang diformat sebagai RTF

Kode berikut dapat digunakan untuk pesan yang diformat sebagai RTF untuk membedakan dan mengekstrak lampiran yang berupa Inline atau muncul sebagai Ikon di badan pesan. Cuplikan kode berikut menunjukkan cara mengidentifikasi dan mengekstrak lampiran tersemat dari MSG yang diformat sebagai RTF.

public static void extractInlineAttachments() {
    MapiMessage message = MapiMessage.load("MSG file with RTF Formatting.msg");
    for (MapiAttachment attachment : message.getAttachments()) {

        if (isAttachmentInline(attachment)) {
            try {
                saveAttachment(attachment, UUID.randomUUID().toString());
            } catch (Exception ex) {
                System.err.println(ex);
            }
        }
    }
}

static boolean isAttachmentInline(MapiAttachment attachment) {
    for (MapiProperty property : attachment.getObjectData().getProperties().get_Values()) {
        if ("\u0003ObjInfo".equals(property.getName())) {
            byte[] data = property.getData();
            int odtPersist1 = data[1] << 8 | data[0];
            return (odtPersist1 & 0x40) == 0;
        }
    }
    return false;
}

static void saveAttachment(MapiAttachment attachment, String fileName) throws IOException {
    for (MapiProperty property : attachment.getObjectData().getProperties().get_Values()) {
        if ("Package".equals(property.getName())) {
            try (FileOutputStream fs = new FileOutputStream(fileName)) {
                fs.write(property.getData(), 0, property.getData().length);
            }
        }
    }
}

Mengambil Lampiran dari Email yang Ditandatangani

Email yang ditandatangani berisi satu lampiran smime.p7m. Itu berarti email dienkripsi oleh SMIME. Format file smime.p7m adalah tanda tangan digital. Untuk melihat konten email ini gunakan RemoveSignature metode. Metode mengembalikan sebuah MailMessage objek tanpa tanda tangan digital.

MailMessage signedEml = MailMessage.load("signed.eml");

if (signedEml.isSigned()) {
    for (int i = 0; i < signedEml.getAttachments().size(); i++) {
        System.out.println("Signed email attachment" + i + ": " + signedEml.getAttachments().get_Item(i).getName());
    }

    // The email is signed. Remove a signature.
    MailMessage eml = signedEml.removeSignature();

    System.out.println("Signature removed.");

    for (int i = 0; i < eml.getAttachments().size(); i++) {
        System.out.println("Email attachment" + i + ": " + eml.getAttachments().get_Item(i).getName());
    }
}

Bekerja dengan Content-Type dan Content-Disposition

API Aspose.Email menyediakan kemampuan untuk bekerja dengan lampiran Content-Type dan Content-Disposition dari header lampiran. Cuplikan kode berikut menunjukkan cara mengambil dan mengubah deskripsi konten dari lampiran.

Menampilkan parameter Content-Type dan Content-Disposition

Cuplikan kode berikut menunjukkan cara menampilkan parameter Content-Type dan Content-Disposition di layar:

void run(MailMessage message) {
    // Attachments
    for (Attachment attachment : message.getAttachments()) {
        ContentDisposition contentDisposition = attachment.getContentDisposition();
        printContentDisposition(contentDisposition);
        ContentType contentType = attachment.getContentType();
        printContentType(contentType);
    }
    // Linked Resources
    for (LinkedResource attachment : message.getLinkedResources()) {
        ContentDisposition contentDisposition = attachment.getContentDisposition();
        printContentDisposition(contentDisposition);
        ContentType contentType = attachment.getContentType();
        printContentType(contentType);
    }
}

void printContentType(ContentType contentType) {
    System.out.println("media-type: " + contentType.getMediaType());
    System.out.println("charset: " + contentType.getCharSet());
    System.out.println("name: " + contentType.getName());
}

void printContentDisposition(ContentDisposition contentDisposition) {
    System.out.println("disposition-type: " + contentDisposition.getDispositionType());
    System.out.println("is-inline: " + contentDisposition.getInline());
    System.out.println("filename: " + contentDisposition.getFileName());
    System.out.println("creation-date: " + contentDisposition.getCreationDate());
    System.out.println("modification-date: " + contentDisposition.getModificationDate());
    System.out.println("read-date: " + contentDisposition.getReadDate());
    System.out.println("size: " + contentDisposition.getSize());
}

Menggunakan parameter Content-Type dan Content-Disposition dengan Lampiran

Cuplikan kode berikut menunjukkan cara menggunakan parameter Content-Type dan Content-Disposition dengan sebuah lampiran:

MailMessage eml = MailMessage.load(fileName);

Attachment attachment = new Attachment(pdfFileName, new ContentType("application/octet-stream"));
attachment.getContentDisposition().setDispositionType("attachment");
attachment.getContentDisposition().setFileName(fileName);

eml.addAttachment(attachment);