Verwalten von E‑Mail‑Anhängen und eingebetteten Objekten in C#
E‑Mail‑Anhänge verwalten
Ein E‑Mail-Anhang ist eine Datei, die zusammen mit einer E‑Mail‑Nachricht gesendet wird. Die Datei kann sowohl als separate Nachricht als auch als Teil der Nachricht, an die sie angehängt ist, gesendet werden. Der Attachment Klasse wird verwendet mit der MailMessage Klasse. Alle Nachrichten enthalten einen Body. Zusätzlich zum Body möchten Sie möglicherweise weitere Dateien senden. Diese werden als Anhänge gesendet und als Instanz von Attachment Klasse. Sie können beliebig viele Anhänge senden, jedoch ist die Größe der Anhänge durch den Mail‑Server begrenzt. Gmail unterstützt beispielsweise keine Dateien größer als 10 MB.
Probieren Sie es aus!
Fügen Sie E‑Mail‑Anhänge online hinzu oder entfernen Sie sie mit dem kostenlosen Aspose.Email Editor App.
Anhang hinzufügen
Um einen Anhang zu einer E‑Mail hinzuzufügen, folgen Sie bitte diesen Schritten:
- Erstellen Sie eine Instanz von dem MailMessage Klasse.
- Erstellen Sie eine Instanz von dem Attachment Klasse.
- Laden Sie das Attachment in das Attachment Instanz.
- Fügen Sie das Attachment Instanz in das MailMessage Instanz.
Das folgende Code‑Snippet zeigt, wie ein Attachment zu einer E‑Mail hinzugefügt wird.
// 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");
Oben haben wir beschrieben, wie Sie mit Aspose.Email Attachments zu Ihrer E‑Mail‑Nachricht hinzufügen. Im Folgenden wird gezeigt, wie Attachments entfernt und Informationen über sie auf dem Bildschirm angezeigt werden.
Referenzanhang hinzufügen
Ein Referenzanhang ist eine Art Anhang, der einen Link oder eine Referenz zu einer Datei oder einem Element enthält, anstatt die Datei bzw. das Element selbst in die E‑Mail‑Nachricht einzufügen. Wenn die Empfänger der E‑Mail auf den Referenzanhang klicken, können sie auf die verlinkte Datei zugreifen, sofern sie die entsprechenden Berechtigungen besitzen. Durch die Verwendung eines Referenzanhangs können Sie eine kleinere E‑Mail‑Nachricht senden und sicherstellen, dass jeder Zugriff auf die aktuellste Version der Datei oder des Elements hat.
Das nachstehende Code‑Snippet zeigt, wie ein Referenzanhang zu einer E‑Mail hinzugefügt wird. Der Code führt die folgenden Schritte aus:
- Lädt die E-Mail-Nachrichtendatei unter Verwendung des MailMessage.Load() Methode.
- Erstellt ein neues ReferenceAttachment-Objekt namens refAttach und übergibt die Anhang-URL "https://[attach_uri]" als Parameter an dessen Konstruktor.
- Setzt den Namen des Anhangs auf "Document.docx" unter Verwendung von Name Eigenschaft des refAttach‑Objekts.
- Setzt den Anbietertyp des Anhangs auf AttachmentProviderType.OneDrivePro unter Verwendung der ProviderType Eigenschaft des refAttach‑Objekts.
- Setzt den Berechtigungstyp des Anhangs auf AttachmentPermissionType.AnyoneCanEdit unter Verwendung der PermissionType Eigenschaft des refAttach‑Objekts.
- Fügt das refAttach‑Objekt zu Anhänge Sammlung des eml‑Objekts mithilfe der Add() Methode.
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);
Anhang entfernen
Um ein Attachment zu entfernen, folgen Sie den unten angegebenen Schritten:
- Erstellen Sie eine Instanz von Attachment Klasse.
- Laden Sie das Attachment in die Instanz von Attachment Klasse.
- Fügen Sie das Attachment zur Instanz von MailMessage Klasse.
- Entfernen Sie die Attachments aus der Instanz von Attachment Klasse unter Verwendung des MailMessage Klasseninstanz.
Das folgende Code‑Snippet zeigt, wie ein Attachment entfernt wird.
// 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);
Anhangsdateinamen anzeigen
Um den Dateinamen eines Anhangs anzuzeigen, führen Sie folgende Schritte aus:
- Durchlaufen Sie die Anhänge in der E‑Mail‑Nachricht und speichern Sie jeden Anhang.
- Zeigen Sie jeden Attachment‑Namen auf dem Bildschirm an.
Das folgende Code‑Snippet zeigt, wie der Dateiname eines Attachments auf dem Bildschirm angezeigt wird.
var eml = MailMessage.Load("Attachments.eml");
foreach (var attachment in eml.Attachments)
{
// Display the the attachment file name
Console.WriteLine(attachment.Name);
}
E‑Mail‑Anhänge extrahieren
Dieses Thema erklärt, wie ein Attachment aus einer E‑Mail‑Datei extrahiert wird. Ein E‑Mail‑Attachment ist eine Datei, die zusammen mit einer E‑Mail‑Nachricht gesendet wird. Die Datei kann sowohl als separate Nachricht als auch als Teil der Nachricht, an die sie angehängt ist, gesendet werden. Alle E‑Mail‑Nachrichten bieten die Möglichkeit, weitere Dateien zu senden. Diese werden als Attachments gesendet und als Instanzen von Attachment Klasse. Die Attachment Klasse wird verwendet mit der MailMessage Klasse, um mit Attachments zu arbeiten. Um Attachments aus einer E‑Mail‑Nachricht zu extrahieren, gehen Sie wie folgt vor:
- Erstellen Sie eine Instanz von dem MailMessage Klasse.
- Laden Sie eine E‑Mail‑Datei in das MailMessage Instanz.
- Erstellen Sie eine Instanz von dem Attachment Klasse und verwenden Sie sie in einer Schleife, um alle Attachments zu extrahieren.
- Speichern Sie den Anhang und zeigen Sie ihn auf dem Bildschirm an.
|Extrahierte Attachments in E‑Mail| | :- | |
| Das folgende Code‑Snippet zeigt, wie Sie E‑Mail‑Anhänge extrahieren.
var eml = MailMessage.Load("Message.eml", new MsgLoadOptions());
foreach (var attachment in eml.Attachments)
{
attachment.Save("MessageEmbedded_out.eml");
Console.WriteLine(attachment.Name);
}
Content‑Description aus Anhang abrufen
Die Aspose.Email‑API bietet die Möglichkeit, die Content‑Description eines Anhangs aus dem Anhang‑Header zu lesen. Das folgende Code‑Snippet zeigt, wie Sie die Inhaltsbeschreibung aus dem Anhang abrufen.
var eml = MailMessage.Load("EmailWithAttachEmbedded.eml");
Console.WriteLine(eml.Attachments[0].Headers["Content-Description"]);
Eingebettete Nachrichten identifizieren
Das folgende Code‑Snippet zeigt, wie ermittelt wird, ob das Attachment eine eingebettete Nachricht ist oder nicht.
var eml = MailMessage.Load("EmailWithAttachEmbedded.eml");
Console.WriteLine(eml.Attachments[0].IsEmbeddedMessage
? "Attachment is an embedded message."
: "Attachment isn't an embedded message.");
Anhänge aus signierten E‑Mails abrufen
Signierte E‑Mails enthalten einen einzelnen smime.p7m‑Anhang. Das bedeutet, dass die E‑Mail mit SMIME verschlüsselt ist. Das Dateiformat smime.p7m ist die digitale Signatur. Um den Inhalt dieser E‑Mail zu sehen, verwenden Sie die RemoveSignature Methode. Die Methode gibt ein MailMessage Objekt ohne digitale Signatur.
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}");
}
}
Umgang mit Inline‑Bildern
Inline‑Bild zum E‑Mail‑Body hinzufügen
Die LinkedResource Klasse wird verwendet mit der MailMessage Klasse, um Objekte in Ihre E‑Mail‑Nachricht einzubetten. Um ein eingebettetes Objekt hinzuzufügen, folgen Sie diesen Schritten
- Erstellen Sie eine Instanz von dem MailMessage Klasse.
- Geben Sie die Werte für Absender, Empfänger und Betreff in MailMessage Instanz.
- Erstellen Sie eine Instanz von dem AlternateView Klasse.
- Erstellen Sie eine Instanz von dem LinkedResource Klasse.
- Laden Sie ein eingebettetes Objekt in das LinkedResourceCollection.
- Fügen Sie das geladene eingebettete Objekt in das MailMessage Klasseninstanz.
- Fügen Sie das AlternateView Instanz zu dem MailMessage Klasseninstanz.
Die untenstehenden Code‑Snippets erzeugen eine E‑Mail‑Nachricht mit sowohl Klartext‑ als auch HTML‑Body und einem Bild, das in das HTML eingebettet ist
|Bild in E‑Mail eingebettet| | :- | |
| Sie können beliebig viele eingebettete Objekte senden. Die Größe des Anhangs ist durch den Mail-Server begrenzt. Gmail unterstützt beispielsweise keine Dateigrößen über 10 MB. Die untenstehenden Code‑Snippets zeigen, wie Objekte in eine E‑Mail eingebettet werden.
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);
Inline‑Bild aus E‑Mail‑Body entfernen
LinkedResourceCollection zugegriffen über MailMessage.LinkedResources Eigenschaft. Die LinkedResourceCollection Die Sammlung bietet eine Methode, um eingebettete Objekte, die einer E‑Mail‑Nachricht hinzugefügt wurden, vollständig zu entfernen. Verwenden Sie die überladene Version von LinkedResourceCollection.RemoveAt Methode, um alle Spuren eines eingebetteten Objekts aus einer E‑Mail‑Nachricht zu entfernen.
Der untenstehende Beispielcode zeigt, wie eingebettete Objekte aus einer E‑Mail‑Nachricht entfernt werden können.
//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);
Umgang mit eingebetteten Objekten
Ein eingebettetes Objekt ist ein Objekt, das mit einer Anwendung erstellt und in ein Dokument oder eine Datei einer anderen Anwendung eingebettet wurde. Zum Beispiel kann eine Microsoft‑Excel‑Tabelle in einen Microsoft‑Word‑Bericht eingebettet werden, oder eine Videodatei kann in eine Microsoft‑PowerPoint‑Präsentation eingebettet werden. Wird eine Datei eingebettet, anstatt sie in ein anderes Dokument einzufügen oder einzukopieren, behält sie ihr ursprüngliches Format bei. Das eingebettete Dokument kann in der Originalanwendung geöffnet und bearbeitet werden.
Eingebettete Objekte extrahieren
Dieses Thema erklärt, wie eingebettete Objekte aus einer E‑Mail‑Datei extrahiert werden. Das eingebettete Dokument kann in der Originalanwendung geöffnet und geändert werden. Um ein eingebettetes Objekt aus einer E‑Mail‑Nachricht zu extrahieren, folgen Sie diesen Schritten:
- Erstellen Sie eine Instanz von dem MailMessage Klasse.
- Laden Sie eine E‑Mail‑Datei in das MailMessage Instanz.
- Erstellen Sie eine Schleife und erstellen Sie eine Instanz von Attachment Klasse darin.
- Speichern Sie den Anhang und zeigen Sie ihn auf dem Bildschirm an.
- Geben Sie die Absender- und Empfängeradresse im MailMessage Instanz.
- E-Mail senden mit dem SmtpClient Klasse.
Das nachstehende Code‑Snippet extrahiert eingebettete Objekte aus einer E‑Mail.
|Extrahierte eingebettete Objekte in E‑Mail| | :- | |
| Das folgende Code‑Snippet zeigt, wie man eingebettete Objekte extrahiert.
var eml = MailMessage.Load("Message.msg", new MsgLoadOptions());
foreach (var attachment in eml.Attachments)
{
attachment.Save("MessageEmbedded_out.msg");
Console.WriteLine(attachment.Name);
}
Verknüpfte Bilder in HTML‑E‑Mails extrahieren
Extrahieren Sie verknüpfte Bildressourcen extern aus dem HTML‑Body und betten Sie sie in die HTML‑Ausgabe mit Aspose.Email für .NET ein. Setzen Sie HtmlSaveOptions.ExtractHTMLBodyResourcesAsAttachments auf True setzen, und verknüpfte Bilder sowie andere Ressourcen im HTML‑Body werden extrahiert und eingebettet. Dies hilft, das ursprüngliche Aussehen von Nachrichten mit verknüpftem Inhalt beizubehalten. Das folgende Codebeispiel demonstriert, wie eine E‑Mail‑Nachricht geladen, ihre externen HTML‑Ressourcen als Anhänge extrahiert, optional Ereignisse zur Ressourcen‑Renderung behandelt und anschließend die Nachricht als HTML‑Datei mit Aspose.Email für .NET gespeichert wird.
// 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);