Arbeta med bilagor och inbäddade objekt
Hantera e‑postbilagor
En e‑postbilaga är en fil som skickas tillsammans med ett e‑postmeddelande. Filen kan skickas som ett separat meddelande såväl som som en del av meddelandet den är bifogad till. Attachment klass används med MailMessage klass. Alla meddelanden innehåller en brödtext. Utöver brödtexten kan du vilja skicka ytterligare filer. Dessa skickas som bilagor och representeras som en instans av Attachment klass. Du kan skicka valfritt antal bilagor men storleken på bilagan begränsas av e‑postservern. Gmail, till exempel, stöder inte filer större än 10 MB.
Try it out!
Lägg till eller ta bort e‑postbilagor online med den kostnadsfria Aspose.Email Editor App.
Lägga till bilaga
För att bifoga en bilaga till ett e‑postmeddelande, följ dessa steg:
- Skapa en instans av MailMessage klass.
- Skapa en instans av Attachment klass.
- Läs in bilagan i Attachment instans.
- Lägg till Attachment instans i MailMessage instans.
Följande kodsnutt visar hur du lägger till en bilaga i ett e‑postmeddelande.
// 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");
Ovan beskrev vi hur man lägger till bilagor i ditt e‑postmeddelande med Aspose.Email. Nedan visas hur man tar bort bilagor och visar information om dem på skärmen.
Ta bort en bilaga
För att ta bort en bilaga, följ stegen nedan:
- Skapa en instans av Attachment klass.
- Läs in bilagan i instansen av Attachment klass.
- Lägg till bilagan till instansen av MailMessage klass.
- Ta bort bilagorna från instansen av Attachment klass med hjälp av MailMessage klassinstans.
Följande kodsnutt visar hur du tar bort en bilaga.
// 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);
Visa bilagans filnamn
För att visa bilagans filnamn, följ dessa steg:
- Loopa igenom bilagorna i e‑postmeddelandet och
- Spara varje bilaga.
- Visa varje bilagsnamn på skärmen.
Följande kodsnutt visar hur du visar ett bilagsfilnamn på skärmen.
MailMessage eml = MailMessage.load("Attachments.eml");
for (Attachment attachment : eml.getAttachments()) {
// Display the attachment file name
System.out.println(attachment.getName());
}
Extrahera e‑postbilagor
Detta ämne förklarar hur man extraherar en bilaga från en e‑postfil. En e‑postbilaga är en fil som skickas tillsammans med ett e‑postmeddelande. Filen kan skickas som ett separat meddelande samt som en del av meddelandet den bifogas till. Alla e‑postmeddelanden har möjlighet att skicka ytterligare filer. Dessa skickas som bilagor och representeras som instanser av Attachment klass. Den Attachment klass används med MailMessage klass för att arbeta med bilagor. För att extrahera bilagor från ett e‑postmeddelande, följ dessa steg:
- Skapa en instans av MailMessage klass.
- Läs in en e‑postfil i MailMessage instans.
- Skapa en instans av Attachment klass och använd den i en slinga för att extrahera alla bilagor.
- Spara bilagan och visa den på skärmen.
|Extraherade bilagor i e‑post| | :- | |
| Följande kodsnutt visar hur du extraherar e‑postbilagor.
MailMessage eml = MailMessage.load("Message.eml", new MsgLoadOptions());
for (Attachment attachment : eml.getAttachments()) {
attachment.save("MessageEmbedded_out.eml");
System.out.println(attachment.getName());
}
Hämta Content-Description från bilaga
Aspose.Email‑API:n ger möjlighet att läsa bilagans Content-Description från bilagehuvudet. Följande kodsnutt visar hur du hämtar innehållsbeskrivningen från bilagan.
MailMessage eml = MailMessage.load("EmailWithAttachEmbedded.eml");
System.out.println(eml.getAttachments().get_Item(0).getHeaders().get_Item("Content-Description"));
Avgöra om en bilaga är ett inbäddat meddelande
Följande kodsnutt demonstrerar hur man avgör om bilagan är ett inbäddat meddelande eller inte.
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.");
Avgör TNEF‑formaterade bilagor
Den Attachment.isTnef egenskap i Aspose.Email Java‑API:n indikerar om meddelandebilagan är ett TNEF‑formaterat meddelande.
Följande kodsnutt demonstrerar hur man avgör om en bilaga är TNEF‑formaterad:
MailMessage eml = MailMessage.load(fileName);
for (Attachment attachment : eml.getAttachments()) {
System.out.println("Is Attachment TNEF?: " + attachment.isTnef());
}
Läs in och spara TNEF‑bilagor
Aspose.Email för Java tillhandahåller metoder i MapiAttachment klass för att utföra följande operationer:
Läs in från TNEF
-
static MapiAttachment loadFromTnef(String fileName)– Laddar en bilaga från en TNEF-fil. -
static MapiAttachment loadFromTnef(InputStream stream)– Laddar en bilaga från en TNEF-ström.
Spara till TNEF
-
void saveToTnef(String fileName)– Sparar en bilaga till en TNEF-fil. -
void saveToTnef(OutputStream stream)– Sparar en bilaga till en TNEF-ström.
Följande kodexempel demonstrerar hur man extraherar en TNEF‑bilaga från ett meddelande, sparar den till en ström eller fil, och sedan läser in den tillbaka i meddelandet som en 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);
Extrahera bilagans URI om bilagan är en URI‑bilaga
Följande kodsnutt demonstrerar hur man extraherar bilagans URI.
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);
}
Lägga till referensbilagor
En referensbilaga är ett alternativ till en lokal filbilaga. I vissa fall kan referensbilagor vara att föredra, till exempel om du vill hantera dess åtkomst. Klasserna nedan används för att hantera och manipulera e‑postmeddelanden och deras bilagor:
- ReferenceAttachment - Representerar en referensbilaga.
- AttachmentPermissionType - Behörighetstypdata som är associerad med en webbreferensbilaga.
- AttachmentProviderType - Typen av webbtjänst som manipulerar bilagan.
Följande kodexempel demonstrerar hur man läser in ett e‑postmeddelande från en fil, skapar en referensbilaga med specifika egenskaper och lägger till bilagan i e‑postmeddelandet:
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);
Arbeta med inbäddade objekt
Ett inbäddat objekt är ett objekt som skapats med ett program och som är inneslutet i ett dokument eller en fil som skapats av ett annat program. Till exempel kan ett Microsoft Excel‑kalkylblad inbäddas i en Microsoft Word‑rapport, eller en videofil kan inbäddas i en Microsoft PowerPoint‑presentation. När en fil är inbäddad, snarare än insatt eller inklistrad i ett annat dokument, behåller den sitt ursprungliga format. Det inbäddade dokumentet kan öppnas i det ursprungliga programmet och modifieras.
Bädda in objekt i ett e‑postmeddelande
Den LinkedResource klass används med MailMessage klass för att bädda in objekt i dina e‑postmeddelanden. För att lägga till ett inbäddat objekt, följ dessa steg
- Skapa en instans av MailMessage klass.
- Ange värdena för från, till och ämne i MailMessage instans.
- Skapa en instans av AlternateView klass.
- Skapa en instans av LinkedResource klass.
- Läs in ett inbäddat objekt i LinkedResourceCollection.
- Lägg till det inlästa inbäddade objektet i MailMessage klassinstans.
- Lägg till AlternateView instans till MailMessage klassinstans.
Kodsnuttarna nedan skapar ett e‑postmeddelande med både vanlig text och HTML‑kroppar samt en bild inbäddad i HTML‑kroppen.
|Bild inbäddad i e‑post| | :- | |
| Du kan skicka valfritt antal inbäddade objekt. Storleken på bilagan begränsas av e‑postservern. Gmail, till exempel, stödjer inte filer större än 10 MB. Kodsnuttarna nedan demonstrerar hur man bäddar in objekt i ett e‑postmeddelande.
// 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());
Ta bort inbäddade objekt från e‑post
LinkedResourceCollection åtkoms via MailMessage.LinkedResources egenskapen. Den LinkedResourceCollection samlingen erbjuder en metod för att helt ta bort inbäddade objekt som lagts till i ett e‑postmeddelande. Använd den överlagrade versionen av LinkedResourceCollection.removeAt metod för att ta bort alla spår av ett inbäddat objekt från ett e‑postmeddelande.
Exempelkoden nedan visar hur man tar bort inbäddade objekt från ett e‑postmeddelande.
// 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);
Extrahera inbäddade objekt
Detta ämne förklarar hur man extraherar inbäddade objekt från en e‑postfil. Ett inbäddat objekt är ett objekt som skapats med ett program och som är inbäddat i ett dokument eller en fil som skapats av ett annat program. Till exempel kan ett Microsoft Excel‑kalkylblad inbäddas i en Microsoft Word‑rapport, eller en videofil kan inbäddas i en Microsoft PowerPoint‑presentation. När en fil är inbäddad, snarare än infogad eller inklistrad i ett annat dokument, behåller den sitt ursprungliga format. Det inbäddade dokumentet kan öppnas i det ursprungliga programmet och modifieras. För att extrahera ett inbäddat objekt från ett e‑postmeddelande, följ dessa steg:
- Skapa en instans av MailMessage klass.
- Läs in en e‑postfil i MailMessage instans.
- Skapa en slinga och skapa en instans av Attachment klass i den.
- Spara bilagan och visa den på skärmen.
- Ange avsändar- och mottagaradressen i MailMessage instans.
- Skicka e‑post med SmtpClient klass.
Kodsnutten nedan extraherar inbäddade objekt från ett e‑postmeddelande.
|Extraherade inbäddade objekt i e‑post| | :- | |
| Följande kodsnutt visar hur du extraherar inbäddade objekt.
MailMessage mailMsg = MailMessage.load("Message.msg", new MsgLoadOptions());
for (Attachment attachment : mailMsg.getAttachments()) {
attachment.save("MessageEmbedded_out.msg");
System.out.println(attachment.getName());
}
Identifiera och extrahera en inbäddad bilaga från MSG i RTF-format
Följande kod kan användas för meddelanden formaterade som RTF för att särskilja och extrahera bilagor som antingen är inbäddade (Inline) eller visas som ikon i meddelandetexten. Följande kodsnutt visar hur du identifierar och extraherar en inbäddad bilaga från ett MSG‑format som är 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);
}
}
}
}
Hämta bilagor från signerat e‑postmeddelande
Signerade e‑postmeddelanden innehåller en enda smime.p7m‑bilaga. Det betyder att e‑posten är krypterad med SMIME. Smime.p7m‑filformatet är den digitala signaturen. För att se innehållet i detta e‑postmeddelande använd RemoveSignature metod. Metoden returnerar en MailMessage objekt utan digital signatur.
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());
}
}
Arbeta med Content-Type och Content-Disposition
Aspose.Email API erbjuder möjlighet att arbeta med bilagan Content-Type och Content-Disposition från bilagehuvudet. Följande kodsnutt visar hur du hämtar och ändrar innehållsbeskrivningen från bilagan.
Visa Content-Type- och Content-Disposition‑parametrar
Följande kodsnutt visar hur du visar parametrarna för Content-Type och Content-Disposition på skärmen:
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());
}
Använda Content-Type- och Content-Disposition‑parametrar med bilagor
Följande kodsnutt visar hur du använder parametrarna Content-Type och Content-Disposition med en bilaga:
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);