Werken met bijlagen en ingesloten objecten

E‑mailbijlagen beheren

Een e‑mailbijlage is een bestand dat samen met een e‑mailbericht wordt verzonden. Het bestand kan als een apart bericht worden verzonden, maar ook als onderdeel van het bericht waaraan het is gekoppeld. De Attachment klasse wordt gebruikt met de MailMessage klasse. Alle berichten bevatten een body. Naast de body wilt u misschien extra bestanden versturen. Deze worden als bijlagen verzonden en worden weergegeven als een instantie van de Attachment klasse. U kunt een willekeurig aantal bijlagen verzenden, maar de grootte van de bijlage wordt beperkt door de mailserver. Gmail ondersteunt bijvoorbeeld geen bestanden groter dan 10 MB.

Bijlage Toevoegen

Volg deze stappen om een bijlage aan een e‑mail toe te voegen:

  1. Maak een instantie van de MailMessage klasse.
  2. Maak een instantie van de Attachment klasse.
  3. Laad bijlage in de Attachment instantie.
  4. Voeg de toe Attachment instantie in de MailMessage instantie.

Het volgende codefragment laat zien hoe een bijlage aan een e‑mail kan worden toegevoegd.

// 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");

Bovenstaand hebben we uitgelegd hoe je bijlagen aan je e‑mailbericht kunt toevoegen met Aspose.Email. Hieronder wordt getoond hoe je bijlagen verwijdert en informatie over hen op het scherm weergeeft.

Een Bijlage Verwijderen

Volg de onderstaande stappen om een bijlage te verwijderen:

  • Maak een instantie van Attachment klasse.
  • Laad de bijlage in de instantie van Attachment klasse.
  • Voeg de bijlage toe aan de instantie van MailMessage klasse.
  • Verwijder de bijlagen van de instantie van Attachment klasse met behulp van de MailMessage klasse‑instantie.

Het volgende codefragment laat zien hoe een bijlage kan worden verwijderd.

// 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);

Bijlagenaam Weergeven

Om de bestandsnaam van de bijlage weer te geven, volg deze stappen:

  1. Loop door de bijlagen in het e‑mailbericht en
    1. Sla elke bijlage op.
    2. Geef elke bijlagenaam weer op het scherm.

Het volgende codefragment laat zien hoe een bestandsnaam van een bijlage op het scherm kan worden weergegeven.

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

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

E‑mailbijlagen Extracten

Dit onderwerp legt uit hoe een bijlage uit een e‑mailbestand kan worden geëxtraheerd. Een e‑mailbijlage is een bestand dat samen met een e‑mailbericht wordt verzonden. Het bestand kan zowel als afzonderlijk bericht als onderdeel van het bericht waaraan het is gekoppeld worden verzonden. Alle e‑mailberichten bieden een optie om extra bestanden te verzenden. Deze worden verzonden als bijlagen en worden weergegeven als instanties van de Attachment klasse. De Attachment klasse wordt gebruikt met de MailMessage klasse om met bijlagen te werken. Volg deze stappen om bijlagen uit een e‑mailbericht te extraheren:

  • Maak een instantie van de MailMessage klasse.
  • Laad een e‑mailbestand in de MailMessage instantie.
  • Maak een instantie van de Attachment klasse en gebruik deze in een lus om alle bijlagen te extraheren.
  • Sla de bijlage op en toon deze op het scherm.

|Geëxtraheerde bijlagen in e‑mail| | :- | |todo:image_alt_text| Het volgende codefragment laat zien hoe e‑mailbijlagen kunnen worden geëxtraheerd.

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

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

Content‑Description van Bijlage Ophalen

Aspose.Email API biedt de mogelijkheid om de Content‑Description van een bijlage uit de bijlage‑header te lezen. Het volgende codefragment laat zien hoe de content‑description van de bijlage kan worden opgehaald.

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

Bepalen of een Bijlage een Ingesloten Bericht is

De volgende codefragment toont hoe kan worden vastgesteld of de bijlage een ingesloten bericht is of niet.

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.");

Bepalen of Bijlagen TNEF‑geformatteerd zijn

De Attachment.isTnef eigenschap van de Aspose.Email Java‑API geeft aan of de berichtbijlage een TNEF‑geformatteerd bericht is.

De volgende codefragment toont hoe kan worden bepaald of een bijlage in TNEF‑formaat is:

MailMessage eml = MailMessage.load(fileName);

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

TNEF‑bijlagen Laden en Opslaan

Aspose.Email voor Java biedt methoden in de MapiAttachment klasse om de volgende bewerkingen uit te voeren:

Laden uit TNEF

  • static MapiAttachment loadFromTnef(String fileName) – Laadt een bijlage vanuit een TNEF‑bestand.

  • static MapiAttachment loadFromTnef(InputStream stream) – Laadt een bijlage vanuit een TNEF‑stream.

Opslaan als TNEF

  • void saveToTnef(String fileName) – Slaat een bijlage op in een TNEF‑bestand.

  • void saveToTnef(OutputStream stream) – Slaat een bijlage op in een TNEF‑stream.

De volgende code‑voorbeeld toont hoe een TNEF‑bijlage uit een bericht kan worden geëxtraheerd, opgeslagen naar een stream of bestand, en vervolgens terug in het bericht kan worden geladen als een 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);

Attachment‑URI Extracten als de Bijlage een URI‑bijlage is

De volgende codefragment toont hoe de Attachment‑URI kan worden geëxtraheerd.

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);
}

Referentie‑bijlagen Toevoegen

Een referentie‑bijlage is een alternatief voor een lokale bestandsbijlage. In sommige gevallen kunnen referentie‑bijlagen voordeliger zijn, bijvoorbeeld wanneer je de toegang wilt beheren. De onderstaande klassen worden gebruikt om e‑mailberichten en hun bijlagen te beheren en te manipuleren:

De volgende code‑voorbeeld toont hoe een e‑mailbericht uit een bestand kan worden geladen, een referentie‑bijlage met specifieke eigenschappen kan worden aangemaakt, en de bijlage aan het e‑mailbericht kan worden toegevoegd:

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);

Werken met Ingesloten Objecten

Een ingesloten object is een object dat met één applicatie is gemaakt en binnen een document of bestand van een andere applicatie is opgenomen. Bijvoorbeeld, een Microsoft Excel‑werkblad kan worden ingesloten in een Microsoft Word‑rapport, of een videobestand kan worden ingesloten in een Microsoft PowerPoint‑presentatie. Wanneer een bestand wordt ingesloten, in plaats van ingevoegd of geplakt in een ander document, behoudt het zijn oorspronkelijke formaat. Het ingesloten document kan worden geopend in de oorspronkelijke applicatie en aangepast.

Objecten Insluiten in een E‑mail

De LinkedResource klasse wordt gebruikt met de MailMessage klasse om objecten in je e‑mailberichten in te sluiten. Volg deze stappen om een ingesloten object toe te voegen

  1. Maak een instantie van de MailMessage klasse.
  2. Geef de waarden voor van, aan en onderwerp op in MailMessage instantie.
  3. Maak een instantie van de AlternateView klasse.
  4. Maak een instantie van de LinkedResource klasse.
  5. Laad een ingesloten object in de LinkedResourceCollection.
  6. Voeg het geladen ingesloten object toe aan de MailMessage klasse‑instantie.
  7. Voeg de toe AlternateView instantie naar de MailMessage klasse‑instantie.

De codefragmenten hieronder genereren een e‑mailbericht met zowel platte‑tekst‑ als HTML‑inhoud en een afbeelding die in de HTML is ingesloten

|Afbeelding ingesloten in e‑mail| | :- | |todo:image_alt_text| Je kunt een willekeurig aantal ingesloten objecten verzenden. De grootte van de bijlage wordt beperkt door de e‑mailserver. Gmail ondersteunt bijvoorbeeld geen bestanden groter dan 10 MB. De codefragmenten hieronder tonen hoe objecten in een e‑mail kunnen worden ingesloten.

// 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());

Ingesloten Objecten Verwijderen uit E‑mail

LinkedResourceCollection toegankelijk via MailMessage.LinkedResources eigenschap. De LinkedResourceCollection collectie biedt een methode om ingesloten objecten die aan een e‑mailbericht zijn toegevoegd volledig te verwijderen. Gebruik de overladen versie van LinkedResourceCollection.removeAt methode om alle sporen van een ingesloten object uit een e‑mailbericht te verwijderen.

De voorbeeldcode hieronder toont hoe ingesloten objecten uit een e‑mailbericht kunnen worden verwijderd.

// 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);

Ingesloten Objecten Extraheren

Dit onderwerp legt uit hoe ingesloten objecten uit een e‑mailbestand kunnen worden geëxtraheerd. Een ingesloten object is een object dat met één applicatie is gemaakt en binnen een document of bestand van een andere applicatie is opgenomen. Bijvoorbeeld, een Microsoft Excel‑werkblad kan worden ingesloten in een Microsoft Word‑rapport, of een videobestand kan worden ingesloten in een Microsoft PowerPoint‑presentatie. Wanneer een bestand wordt ingesloten, in plaats van ingevoegd of geplakt in een ander document, behoudt het zijn oorspronkelijke formaat. Het ingesloten document kan worden geopend in de oorspronkelijke applicatie en kan worden aangepast. Volg deze stappen om een ingesloten object uit een e‑mailbericht te extraheren:

  1. Maak een instantie van de MailMessage klasse.
  2. Laad een e-mailbestand in de MailMessage instantie.
  3. Maak een lus en maak een instantie van de Attachment klasse daarin.
  4. Sla de bijlage op en toon deze op het scherm.
  5. Geef het afzender- en ontvangeradres op in de MailMessage instantie.
  6. E-mail verzenden met de SmtpClient klasse.

Het onderstaande codefragment extraheert ingesloten objecten uit een e‑mail.

|Uitgevoerde ingesloten objecten in e‑mail| | :- | |todo:image_alt_text| Het volgende codefragment laat zien hoe u ingesloten objecten kunt extraheren.

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

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

Identificeer en extraheer een ingesloten bijlage uit MSG opgemaakt als RTF

De volgende code kan worden gebruikt voor berichten die zijn opgemaakt als RTF om bijlagen die inline zijn of als pictogram in de berichtinhoud verschijnen te onderscheiden en te extraheren. Het onderstaande codefragment laat zien hoe u een ingesloten bijlage uit een MSG die als RTF is opgemaakt, kunt identificeren en extraheren.

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);
            }
        }
    }
}

Bijlagen ophalen uit ondertekende e‑mail

Ondertekende e‑mails bevatten één smime.p7m‑bijlage. Dit betekent dat de e‑mail versleuteld is met SMIME. Het smime.p7m‑bestandsformaat is de digitale handtekening. Gebruik de RemoveSignature methode. De methode retourneert een MailMessage object zonder digitale handtekening.

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());
    }
}

Werken met Content‑Type en Content‑Disposition

Aspose.Email API biedt de mogelijkheid om met de bijlage te werken Content-Type en Content-Disposition van de bijlageheader. Het onderstaande codefragment laat zien hoe u de inhoudsbeschrijving van de bijlage kunt ophalen en wijzigen.

Weergeven van Content‑Type‑ en Content‑Disposition‑parameters

Het onderstaande codefragment laat zien hoe u parameters van Content‑Type en Content‑Disposition op het scherm kunt weergeven:

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());
}

Gebruik van Content‑Type‑ en Content‑Disposition‑parameters met bijlagen

Het volgende codefragment laat zien hoe u de Content‑Type‑ en Content‑Disposition‑parameters kunt gebruiken met een bijlage:

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);