Gérer les pièces jointes et les objets incorporés des e‑mails en C#

Gérer les pièces jointes des e‑mails

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.

Ajouter une pièce jointe

Pour ajouter une pièce jointe à un e‑mail, veuillez suivre les étapes suivantes :

  1. Créez une instance de la MailMessage classe.
  2. Créez une instance de la Attachment classe.
  3. Chargez la pièce jointe dans le Attachment instance.
  4. 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
var eml = new MailMessage
{
    From = "sender@from.com",
    To = "receiver@to.com",
    Subject = "This is message",
    Body = "This is body"
};

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

// Add Multiple Attachment in instance of MailMessage class and Save message to disk
eml.Attachments.Add(attachment);

eml.AddAttachment(new Attachment("1.jpg"));
eml.AddAttachment(new Attachment("1.doc"));
eml.AddAttachment(new Attachment("1.rar"));
eml.AddAttachment(new Attachment("1.pdf"));
eml.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.

Ajouter une pièce jointe de référence

Une pièce jointe de référence est un type de pièce jointe qui comprend un lien ou une référence vers un fichier ou un élément, plutôt que d’inclure le fichier ou l’élément lui‑même dans le message électronique. Lorsque les destinataires du courrier cliquent sur la pièce jointe de référence, ils peuvent accéder au fichier lié s’ils disposent des autorisations appropriées. En utilisant une pièce jointe de référence, vous pouvez envoyer un message plus petit et garantir que tout le monde a accès à la version la plus à jour du fichier ou de l’élément.

L’extrait de code ci-dessous montre comment ajouter une pièce jointe de référence à un e‑mail. Le code exécute les étapes suivantes :

  1. Charge le fichier de message électronique en utilisant le MailMessage.Load() méthode.
  2. Crée un nouvel objet ReferenceAttachment nommé refAttach, en passant l’URL de la pièce jointe "https://[attach_uri]" comme paramètre à son constructeur.
  3. Définit le nom de la pièce jointe à "Document.docx" en utilisant le Name propriété de l’objet refAttach.
  4. Définit le type de fournisseur de la pièce jointe à AttachmentProviderType.OneDrivePro en utilisant le ProviderType propriété de l’objet refAttach.
  5. Définit le type d’autorisation de la pièce jointe à AttachmentPermissionType.AnyoneCanEdit en utilisant le PermissionType propriété de l’objet refAttach.
  6. Ajoute l’objet refAttach au Pièces jointes collection de l’objet eml en utilisant le Add() méthode.
var eml = MailMessage.Load("fileName");

var refAttach = new ReferenceAttachment("https://[attach_uri]")
{
    Name = "Document.docx",
    ProviderType = AttachmentProviderType.OneDrivePro,
    PermissionType = AttachmentPermissionType.AnyoneCanEdit
};

eml.Attachments.Add(refAttach);

Supprimer la 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
var eml = new MailMessage {From = "sender@sender.com", To = "receiver@gmail.com"};

// Load an attachment
var attachment = new Attachment("1.txt");
eml.Attachments.Add(attachment);

// Remove attachment from your MailMessage
eml.Attachments.Remove(attachment);

Afficher le nom de fichier de la pièce jointe

Pour afficher le nom de fichier d’une pièce jointe, suivez ces étapes :

  1. Parcourir les pièces jointes du message e‑mail et enregistrer chaque pièce jointe.
  2. 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.

var eml = MailMessage.Load("Attachments.eml");

foreach (var attachment in eml.Attachments)
{
    // Display the the attachment file name
    Console.WriteLine(attachment.Name);
}

Extraire les 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| | :- | |todo:image_alt_text| L’extrait de code suivant montre comment extraire les pièces jointes d’e‑mail.

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

foreach (var attachment in eml.Attachments)
{
    attachment.Save("MessageEmbedded_out.eml");
    Console.WriteLine(attachment.Name);
}

Récupérer le Content-Description de la pièce jointe

L’API Aspose.Email offre la capacité de lire la description du contenu d’une pièce jointe à partir de son en‑tête. L’extrait de code suivant montre comment récupérer la description du contenu de la pièce jointe.

var eml = MailMessage.Load("EmailWithAttachEmbedded.eml");
Console.WriteLine(eml.Attachments[0].Headers["Content-Description"]);

Identifier les messages incorporés

L’extrait de code suivant montre comment déterminer si la pièce jointe est un message incorporé ou non.

var eml = MailMessage.Load("EmailWithAttachEmbedded.eml");

Console.WriteLine(eml.Attachments[0].IsEmbeddedMessage
    ? "Attachment is an embedded message."
    : "Attachment isn't an embedded message.");

Récupérer les pièces jointes des e‑mails signés

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.

var signedEml = MailMessage.Load("signed.eml");
        
if (signedEml.IsSigned)
{
    for (var i = 0; i < signedEml.Attachments.Count; i++)
    {
        Console.WriteLine($@"Signed email attachment{i}: {signedEml.Attachments[i].Name}");
    }
    
    // The email is signed. Remove a signature.
    var eml = signedEml.RemoveSignature();
    
    Console.WriteLine(@"Signature removed.");

    for (var i = 0; i < eml.Attachments.Count; i++)
    {
        Console.WriteLine($@"Email attachment{i}: {eml.Attachments[i].Name}");
    }
}

Gestion des images en ligne

Ajouter une image en ligne au corps du e‑mail

Le LinkedResource classe est utilisée avec le MailMessage classe pour incorporer des objets dans votre message e‑mail. Pour ajouter un objet incorporé, suivez ces étapes

  1. Créez une instance de la MailMessage classe.
  2. Spécifiez les valeurs de l’expéditeur, du destinataire et du sujet dans MailMessage instance.
  3. Créez une instance de la AlternateView classe.
  4. Créez une instance de la LinkedResource classe.
  5. Chargez un objet incorporé dans le LinkedResourceCollection.
  6. Ajoutez l’objet incorporé chargé dans le MailMessage instance de classe.
  7. 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| | :- | |todo:image_alt_text| 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.

var eml = new MailMessage
{
    From = "AndrewIrwin@from.com",
    To = "SusanMarc@to.com",
    Subject = "This is an email"
};

// Create the plain text part It is viewable by those clients that don't support HTML
var 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'.
var 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
var barcode = new LinkedResource("1.jpg", MediaTypeNames.Image.Jpeg)
{
    ContentId = "barcode"
};

eml.LinkedResources.Add(barcode);
eml.AlternateViews.Add(plainView);
eml.AlternateViews.Add(htmlView);

eml.Save("EmbeddedImage_out.msg", SaveOptions.DefaultMsgUnicode);

Supprimer l’image en ligne du corps du 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
var eml = MailMessage.Load("EmlWithLinkedResources.eml");

//Remove a LinkedResource
eml.LinkedResources.RemoveAt(0, true);

//Now clear the Alternate View for linked Resources
eml.AlternateViews[0].LinkedResources.Clear(true);

Gestion des objets incorporés

Un objet incorporé est un objet créé avec une application et inclus dans un document ou un 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 qu’inséré ou collé dans un autre document, il conserve son format original. Le document incorporé peut être ouvert dans l’application d’origine et modifié.

Extraire les objets incorporés

Ce sujet explique comment extraire des objets incorporés d’un fichier e‑mail. 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 ces étapes :

  1. Créez une instance de la MailMessage classe.
  2. Chargez un fichier e‑mail dans le MailMessage instance.
  3. Créez une boucle et créez une instance de Attachment classe dedans.
  4. Enregistrez la pièce jointe et affichez‑la à l’écran.
  5. Spécifiez l’adresse de l’expéditeur et du destinataire dans le MailMessage instance.
  6. 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| | :- | |todo:image_alt_text| Le fragment de code suivant montre comment extraire des objets incorporés.

var eml = MailMessage.Load("Message.msg", new MsgLoadOptions());

foreach (var attachment in eml.Attachments)
{
    attachment.Save("MessageEmbedded_out.msg");
    Console.WriteLine(attachment.Name);
}

Extraire les images liées dans les e‑mails HTML

Extraire les ressources d’images liées à partir du corps HTML et les incorporer dans la sortie HTML avec Aspose.Email pour .NET. Définir HtmlSaveOptions.ExtractHTMLBodyResourcesAsAttachments à True, les images liées et les autres ressources dans le corps HTML seront extraites et incorporées. Cela aide à préserver l’apparence originale des messages avec du contenu lié. L’exemple de code suivant montre comment charger un message e‑mail, extraire ses ressources HTML externes en tant que pièces jointes, gérer éventuellement les événements de rendu des ressources, puis enregistrer le message sous forme de fichier HTML en utilisant Aspose.Email pour .NET.

// Load the email message
var mailMessage = MailMessage.Load("input.eml");

// Set options to extract external HTML resources
var options = new HtmlSaveOptions();
options.ExtractHTMLBodyResourcesAsAttachments = true;

// Optional: Handle resource rendering events
options.ResourceHtmlRendering += (sender, e) =>
{
    Console.WriteLine(e.PathToResourceFile + " " + ((Attachment)sender).ContentId);
};

// Save the HTML representation of the email
mailMessage.Save("output.html", options);