Travail avec les pièces jointes et les objets incorporés
Gestion des pièces jointes d’e‑mail
Une pièce jointe d’e‑mail est un fichier envoyé avec un message e‑mail. Le fichier peut être envoyé en tant que message séparé ainsi qu’en tant que partie du message auquel il est joint. Le Attachment classe est utilisée avec le MailMessage classe. Tous les messages comprennent un corps. En plus du corps, vous pouvez vouloir envoyer des fichiers supplémentaires. Ceux‑ci sont envoyés en tant que pièces jointes et sont représentés par une instance de la Attachment classe. Vous pouvez envoyer un nombre quelconque de pièces jointes mais la taille de la pièce jointe est limitée par le serveur de messagerie. Gmail, par exemple, ne prend pas en charge les fichiers de plus de 10 Mo.
Essayez-le !
Ajoutez ou supprimez des pièces jointes d’e‑mail en ligne avec le gratuit Aspose.Email Editor App.
Ajout d’une pièce jointe
Pour attacher une pièce jointe à un e‑mail, veuillez suivre ces étapes :
- Créez une instance de la MailMessage classe.
- Créez une instance de la Attachment classe.
- Chargez la pièce jointe dans le Attachment instance.
- Ajouter le Attachment instance dans le MailMessage instance.
L’extrait de code suivant vous montre comment ajouter une pièce jointe à un e‑mail.
// 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");
Ci‑dessus, nous avons décrit comment ajouter des pièces jointes à votre message e‑mail avec Aspose.Email. Ce qui suit montre comment supprimer les pièces jointes et afficher leurs informations à l’écran.
Suppression d’une pièce jointe
Pour supprimer une pièce jointe, suivez les étapes ci‑dessous :
- Créez une instance de Attachment classe.
- Chargez la pièce jointe dans l’instance de Attachment classe.
- Ajoutez la pièce jointe à l’instance de MailMessage classe.
- Supprimez les pièces jointes de l’instance de Attachment classe utilisant le MailMessage instance de classe.
L’extrait de code suivant vous montre comment supprimer une pièce jointe.
// 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);
Affichage du nom de fichier de la pièce jointe
Pour afficher le nom du fichier de la pièce jointe, suivez ces étapes :
- Parcourez les pièces jointes du message e‑mail et
- Enregistrez chaque pièce jointe.
- Affichez le nom de chaque pièce jointe à l’écran.
L’extrait de code suivant vous montre comment afficher le nom de fichier d’une pièce jointe à l’écran.
MailMessage eml = MailMessage.load("Attachments.eml");
for (Attachment attachment : eml.getAttachments()) {
// Display the attachment file name
System.out.println(attachment.getName());
}
Extraction de pièces jointes d’e‑mail
Ce sujet explique comment extraire une pièce jointe d’un fichier e‑mail. Une pièce jointe d’e‑mail est un fichier envoyé avec un message e‑mail. Le fichier peut être envoyé comme un message séparé ainsi que comme partie du message auquel il est joint. Tous les messages e‑mail offrent la possibilité d’envoyer des fichiers supplémentaires. Ceux‑ci sont envoyés en tant que pièces jointes et sont représentés sous forme d’instances de Attachment classe. Le Attachment classe est utilisée avec le MailMessage classe pour travailler avec les pièces jointes. Pour extraire les pièces jointes d’un message e‑mail, suivez ces étapes :
- Créez une instance de la MailMessage classe.
- Chargez un fichier e‑mail dans le MailMessage instance.
- Créez une instance de la Attachment classe et utilisez‑la dans une boucle pour extraire toutes les pièces jointes.
- Enregistrez la pièce jointe et affichez‑la à l’écran.
|Pièces jointes extraites dans l’e‑mail| | :- | |
| L’extrait de code suivant vous montre comment extraire les pièces jointes d’e‑mail.
MailMessage eml = MailMessage.load("Message.eml", new MsgLoadOptions());
for (Attachment attachment : eml.getAttachments()) {
attachment.save("MessageEmbedded_out.eml");
System.out.println(attachment.getName());
}
Récupération de la Content-Description d’une pièce jointe
L’API Aspose.Email offre la possibilité de lire la description du contenu d’une pièce jointe à partir de l’en‑tête de la pièce jointe. L’extrait de code suivant vous montre comment récupérer la description du contenu de la pièce jointe.
MailMessage eml = MailMessage.load("EmailWithAttachEmbedded.eml");
System.out.println(eml.getAttachments().get_Item(0).getHeaders().get_Item("Content-Description"));
Détermination si une pièce jointe est un message incorporé
L’extrait de code suivant montre comment déterminer si la pièce jointe est un message incorporé ou non.
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.");
Déterminer les pièces jointes au format TNEF
Le Attachment.isTnef propriété de l’API Aspose.Email Java indique si la pièce jointe du message est au format TNEF.
L’extrait de code suivant montre comment déterminer si une pièce jointe est au format TNEF :
MailMessage eml = MailMessage.load(fileName);
for (Attachment attachment : eml.getAttachments()) {
System.out.println("Is Attachment TNEF?: " + attachment.isTnef());
}
Chargement et enregistrement des pièces jointes TNEF
Aspose.Email for Java fournit des méthodes dans le MapiAttachment classe pour effectuer les opérations suivantes :
Charger depuis le TNEF
-
static MapiAttachment loadFromTnef(String fileName)– Charge une pièce jointe à partir d’un fichier TNEF. -
static MapiAttachment loadFromTnef(InputStream stream)– Charge une pièce jointe à partir d’un flux TNEF.
Enregistrer en TNEF
-
void saveToTnef(String fileName)– Enregistre une pièce jointe dans un fichier TNEF. -
void saveToTnef(OutputStream stream)– Enregistre une pièce jointe dans un flux TNEF.
L’exemple de code suivant montre comment extraire une pièce jointe TNEF d’un message, l’enregistrer dans un flux ou un fichier, puis la recharger dans le message en tant que 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);
Extraction de l’URI de la pièce jointe si la pièce jointe est une URI‑attachment
L’extrait de code suivant montre comment extraire l’URI de la pièce jointe.
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);
}
Ajout de pièces jointes de référence
Une pièce jointe de référence est une alternative à la pièce jointe de fichier local. Dans certains cas, les pièces jointes de référence peuvent être préférables, par exemple si vous souhaitez gérer leur accès. Les classes ci‑dessous sont utilisées pour gérer et manipuler les messages e‑mail et leurs pièces jointes :
- ReferenceAttachment - Représente une pièce jointe de référence.
- AttachmentPermissionType - Les données du type d’autorisation associées à une pièce jointe de référence web.
- AttachmentProviderType - Le type de service web manipulant la pièce jointe.
L’exemple de code suivant montre comment charger un message e‑mail depuis un fichier, créer une pièce jointe de référence avec des propriétés spécifiques, et ajouter la pièce jointe au message e‑mail :
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);
Travailler avec des objets incorporés
Un objet incorporé est un objet créé avec une application et inclus dans un document ou fichier créé par une autre application. Par exemple, une feuille de calcul Microsoft Excel peut être incorporée dans un rapport Microsoft Word, ou un fichier vidéo peut être incorporé dans une présentation Microsoft PowerPoint. Lorsqu’un fichier est incorporé, plutôt que d’être inséré ou collé dans un autre document, il conserve son format d’origine. Le document incorporé peut être ouvert dans l’application d’origine et être modifié.
Incorporation d’objets dans un e‑mail
Le LinkedResource classe est utilisée avec le MailMessage classe pour incorporer des objets dans vos messages e‑mail. Pour ajouter un objet incorporé, suivez ces étapes
- Créez une instance de la MailMessage classe.
- Spécifiez les valeurs de l’expéditeur, du destinataire et du sujet dans MailMessage instance.
- Créez une instance de la AlternateView classe.
- Créez une instance de la LinkedResource classe.
- Chargez un objet incorporé dans le LinkedResourceCollection.
- Ajoutez l’objet incorporé chargé dans le MailMessage instance de classe.
- Ajouter le AlternateView instance au MailMessage instance de classe.
Les extraits de code ci‑dessous produisent un message e‑mail avec des corps texte brut et HTML ainsi qu’une image incorporée dans le HTML
|Image incorporée dans l’e‑mail| | :- | |
| Vous pouvez envoyer un nombre illimité d’objets incorporés. La taille de la pièce jointe est limitée par le serveur de messagerie. Gmail, par exemple, ne prend pas en charge les fichiers de plus de 10 Mo. Les extraits de code ci‑dessous montrent comment incorporer des objets dans un e‑mail.
// 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());
Suppression d’objets incorporés d’un e‑mail
LinkedResourceCollection accessible via MailMessage.LinkedResources propriété. La LinkedResourceCollection la collection fournit une méthode pour supprimer entièrement les objets incorporés ajoutés à un message e‑mail. Utilisez la version surchargée de LinkedResourceCollection.removeAt méthode pour supprimer toutes les traces d’un objet incorporé d’un message e‑mail.
Le code d’exemple ci‑dessous montre comment supprimer des objets incorporés d’un message e‑mail.
// 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);
Extraction d’objets incorporés
Ce sujet explique comment extraire des objets incorporés d’un fichier e‑mail. Un objet incorporé est un objet créé avec une application et inclus dans un document ou fichier créé par une autre application. Par exemple, une feuille de calcul Microsoft Excel peut être incorporée dans un rapport Microsoft Word, ou un fichier vidéo peut être incorporé dans une présentation Microsoft PowerPoint. Lorsqu’un fichier est incorporé, plutôt que d’être inséré ou collé dans un autre document, il conserve son format d’origine. Le document incorporé peut être ouvert dans l’application d’origine et être modifié. Pour extraire un objet incorporé d’un message e‑mail, suivez les étapes suivantes :
- Créez une instance de la MailMessage classe.
- Chargez un fichier e‑mail dans le MailMessage instance.
- Créez une boucle et créez une instance de Attachment classe dedans.
- Enregistrez la pièce jointe et affichez‑la à l’écran.
- Spécifiez l’adresse de l’expéditeur et du destinataire dans le MailMessage instance.
- Envoyer un e‑mail en utilisant le SmtpClient classe.
Le fragment de code ci‑dessus extrait des objets incorporés d’un e‑mail.
|Objets incorporés extraits dans l’e‑mail| | :- | |
| Le fragment de code suivant montre comment extraire des objets incorporés.
MailMessage mailMsg = MailMessage.load("Message.msg", new MsgLoadOptions());
for (Attachment attachment : mailMsg.getAttachments()) {
attachment.save("MessageEmbedded_out.msg");
System.out.println(attachment.getName());
}
Identifier et extraire une pièce jointe incorporée d’un MSG formaté en RTF
Le code suivant peut être utilisé pour les messages formatés en RTF afin de différencier et extraire les pièces jointes qui sont soit Inline, soit apparaissent comme une icône dans le corps du message. Le fragment de code suivant montre comment identifier et extraire une pièce jointe incorporée à partir d’un MSG formaté en 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);
}
}
}
}
Récupération des pièces jointes d’un e‑mail signé
Les e‑mails signés contiennent une unique pièce jointe smime.p7m. Cela signifie que l’e‑mail est chiffré par SMIME. Le format de fichier smime.p7m est la signature numérique. Pour voir le contenu de cet e‑mail, utilisez le RemoveSignature méthode. La méthode renvoie un MailMessage objet sans signature numérique.
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());
}
}
Travail avec Content-Type et Content-Disposition
L’API Aspose.Email offre la capacité de travailler avec la pièce jointe Content-Type et Content-Disposition à partir de l’en‑tête de la pièce jointe. Le fragment de code suivant montre comment récupérer et modifier la description du contenu de la pièce jointe.
Affichage des paramètres Content-Type et Content-Disposition
Le fragment de code suivant montre comment afficher les paramètres de Content-Type et Content-Disposition à l’écran :
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());
}
Utilisation des paramètres Content-Type et Content-Disposition avec les pièces jointes
Le fragment de code suivant montre comment utiliser les paramètres Content-Type et Content-Disposition avec une pièce jointe :
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);