Zarządzaj załącznikami e‑mail i osadzonymi obiektami w C#
Zarządzaj załącznikami e‑mail
Załącznik e‑mail to plik wysyłany wraz z wiadomością e‑mail. Plik może być wysłany jako oddzielna wiadomość, jak i jako część wiadomości, do której jest dołączony. Attachment klasy używanej z MailMessage klasa. Wszystkie wiadomości zawierają ciało. Oprócz ciała możesz chcieć wysłać dodatkowe pliki. Są one wysyłane jako załączniki i reprezentowane jako instancja Attachment klasa. Można wysłać dowolną liczbę załączników, ale ich rozmiar jest ograniczony przez serwer poczty. Gmail, na przykład, nie obsługuje plików większych niż 10 MB.
Wypróbuj!
Dodawaj lub usuń załączniki e‑mail online przy użyciu darmowego Aspose.Email Editor App.
Dodaj załącznik
Aby dodać załącznik do e‑maila, postępuj zgodnie z następującymi krokami:
- Utwórz instancję MailMessage klasa.
- Utwórz instancję Attachment klasa.
- Załaduj załącznik do Attachment instancję.
- Dodaj Attachment instancję do MailMessage instancję.
Poniższy fragment kodu pokazuje, jak dodać załącznik do e‑maila.
// 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");
Powyżej opisaliśmy, jak dodać załączniki do wiadomości e‑mail za pomocą Aspose.Email. Poniżej pokazujemy, jak usuwać załączniki i wyświetlać informacje o nich na ekranie.
Dodaj załącznik referencyjny
Załącznik referencyjny to rodzaj załącznika, który zawiera link lub odwołanie do pliku lub elementu, zamiast dołączania samego pliku lub elementu do wiadomości e‑mail. Gdy odbiorcy e‑maila klikną w załącznik referencyjny, będą mogli uzyskać dostęp do powiązanego pliku, o ile posiadają odpowiednie uprawnienia. Korzystając z załącznika referencyjnego, możesz wysłać mniejszą wiadomość e‑mail i zapewnić, że wszyscy mają dostęp do najnowszej wersji pliku lub elementu.
Poniższy fragment kodu pokazuje, jak dodać załącznik referencyjny do e‑maila. Kod wykonuje następujące kroki:
- Ładuje plik wiadomości e-mail przy użyciu MailMessage.Load() metoda.
- Tworzy nowy obiekt ReferenceAttachment o nazwie refAttach, przekazując URL załącznika "https://[attach_uri]" jako parametr do jego konstruktora.
- Ustawia nazwę załącznika na "Document.docx" przy użyciu Name właściwość obiektu refAttach.
- Ustawia typ dostawcy załącznika na AttachmentProviderType.OneDrivePro używając ProviderType właściwość obiektu refAttach.
- Ustawia typ uprawnień załącznika na AttachmentPermissionType.AnyoneCanEdit używając PermissionType właściwość obiektu refAttach.
- Dodaje obiekt refAttach do Załączniki kolekcja obiektu eml przy użyciu Add() metoda.
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);
Usuń załącznik
Aby usunąć załącznik, wykonaj poniższe kroki:
- Utwórz instancję Attachment klasa.
- Załaduj załącznik w instancji Attachment klasa.
- Dodaj załącznik do instancji MailMessage klasa.
- Usuń załączniki z instancji Attachment klasę przy użyciu MailMessage instancję klasy.
Poniższy fragment kodu pokazuje, jak usunąć załącznik.
// 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);
Wyświetl nazwę pliku załącznika
Aby wyświetlić nazwę pliku załącznika, wykonaj następujące kroki:
- Iteruj przez załączniki w wiadomości e‑mail i zapisz każdy załącznik.
- Wyświetl nazwę każdego załącznika na ekranie.
Poniższy fragment kodu pokazuje, jak wyświetlić nazwę pliku załącznika na ekranie.
var eml = MailMessage.Load("Attachments.eml");
foreach (var attachment in eml.Attachments)
{
// Display the the attachment file name
Console.WriteLine(attachment.Name);
}
Wyodrębnij załączniki e‑mail
Ten temat wyjaśnia, jak wyodrębnić załącznik z pliku e‑mail. Załącznik e‑mail to plik wysyłany wraz z wiadomością e‑mail. Plik może być wysłany jako oddzielna wiadomość, jak i jako część wiadomości, do której jest dołączony. Wszystkie wiadomości e‑mail zawierają opcję wysyłania dodatkowych plików. Są one wysyłane jako załączniki i reprezentowane jako instancje Attachment klasa. Ta Attachment klasy używanej z MailMessage klasa do pracy z załącznikami. Aby wyodrębnić załączniki z wiadomości e‑mail, wykonaj następujące kroki:
- Utwórz instancję MailMessage klasa.
- Załaduj plik e‑mail do MailMessage instancję.
- Utwórz instancję Attachment klasę i użyj jej w pętli, aby wyodrębnić wszystkie załączniki.
- Zapisz załącznik i wyświetl go na ekranie.
|Wyodrębnione załączniki w e‑mailu| | :- | |
| Poniższy fragment kodu pokazuje, jak wyodrębnić załączniki 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);
}
Pobierz Content-Description z załącznika
API Aspose.Email zapewnia możliwość odczytania Content-Description załącznika z nagłówka załącznika. Poniższy fragment kodu pokazuje, jak pobrać opis treści z załącznika.
var eml = MailMessage.Load("EmailWithAttachEmbedded.eml");
Console.WriteLine(eml.Attachments[0].Headers["Content-Description"]);
Zidentyfikuj osadzone wiadomości
Poniższy fragment kodu demonstruje, jak określić, czy załącznik jest wiadomością osadzoną, czy nie.
var eml = MailMessage.Load("EmailWithAttachEmbedded.eml");
Console.WriteLine(eml.Attachments[0].IsEmbeddedMessage
? "Attachment is an embedded message."
: "Attachment isn't an embedded message.");
Pobierz załączniki z podpisanych e‑maili
Podpisane e‑maile zawierają pojedynczy załącznik smime.p7m. Oznacza to, że wiadomość jest szyfrowana przez SMIME. Format pliku smime.p7m jest podpisem cyfrowym. Aby zobaczyć zawartość tego e‑maila, użyj RemoveSignature metoda. Metoda zwraca MailMessage obiekt bez podpisu cyfrowego.
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}");
}
}
Obsługa obrazów w‑treść
Dodaj obraz w‑treść do ciała e‑mail
Ten LinkedResource klasy używanej z MailMessage klasa do osadzania obiektów w wiadomości e‑mail. Aby dodać osadzony obiekt, wykonaj następujące kroki
- Utwórz instancję MailMessage klasa.
- Określ wartości od, do i tematu w MailMessage instancję.
- Utwórz instancję AlternateView klasa.
- Utwórz instancję LinkedResource klasa.
- Załaduj osadzony obiekt do LinkedResourceCollection.
- Dodaj załadowany osadzony obiekt do MailMessage instancję klasy.
- Dodaj AlternateView instancję do MailMessage instancję klasy.
Poniższe fragmenty kodu generują wiadomość e‑mail z zarówno tekstem prostym, jak i ciałem HTML oraz obrazem osadzonym w HTML
|Obraz osadzony w e‑mailu| | :- | |
| Możesz wysłać dowolną liczbę osadzonych obiektów. Rozmiar załącznika jest ograniczony przez serwer pocztowy. Gmail, na przykład, nie obsługuje plików większych niż 10 MB. Poniższe fragmenty kodu pokazują, jak osadzić obiekty w e‑mailu.
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);
Usuń obraz w‑treść z ciała e‑mail
LinkedResourceCollection dostępna poprzez MailMessage.LinkedResources właściwości. LinkedResourceCollection kolekcja udostępnia metodę całkowitego usunięcia osadzonych obiektów dodanych do wiadomości e‑mail. Użyj przeciążonej wersji LinkedResourceCollection.RemoveAt metoda usuwająca wszystkie ślady osadzonego obiektu z wiadomości e‑mail.
Poniższy przykładowy kod pokazuje, jak usunąć osadzone obiekty z wiadomości 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);
Obsługa osadzonych obiektów
Osadzony obiekt to obiekt utworzony w jednej aplikacji i zamknięty w dokumencie lub pliku utworzonym przez inną aplikację. Na przykład arkusz Microsoft Excel może być osadzony w raporcie Microsoft Word, lub plik wideo może być osadzony w prezentacji Microsoft PowerPoint. Kiedy plik jest osadzony, a nie wstawiany czy wklejany do innego dokumentu, zachowuje swój pierwotny format. Osadzony dokument może być otwarty w oryginalnej aplikacji i zmodyfikowany.
Wyodrębnij osadzone obiekty
Ten temat wyjaśnia, jak wyodrębnić osadzone obiekty z pliku e‑mail. Osadzony dokument może być otwarty w oryginalnej aplikacji i zmodyfikowany. Aby wyodrębnić osadzony obiekt z wiadomości e‑mail, wykonaj następujące kroki:
- Utwórz instancję MailMessage klasa.
- Załaduj plik e-mail w MailMessage instancję.
- Utwórz pętlę i utwórz instancję Attachment klasa w niej.
- Zapisz załącznik i wyświetl go na ekranie.
- Określ adres nadawcy i odbiorcy w MailMessage instancję.
- Wyślij e-mail używając SmtpClient klasa.
Poniższy fragment kodu wyodrębnia osadzone obiekty z e‑maila.
|Wyodrębnione osadzone obiekty w e‑mailu| | :- | |
| Poniższy fragment kodu pokazuje, jak wyodrębnić osadzone obiekty.
var eml = MailMessage.Load("Message.msg", new MsgLoadOptions());
foreach (var attachment in eml.Attachments)
{
attachment.Save("MessageEmbedded_out.msg");
Console.WriteLine(attachment.Name);
}
Wyodrębnij powiązane obrazy w wiadomościach HTML
Wyodrębnij powiązane zasoby obrazów z ciała HTML i osadź je w wyjściu HTML przy użyciu Aspose.Email dla .NET. Ustaw HtmlSaveOptions.ExtractHTMLBodyResourcesAsAttachments na True, a powiązane obrazy i inne zasoby w ciele HTML zostaną wyodrębnione i osadzone. Pomaga to zachować oryginalny wygląd wiadomości z powiązanymi treściami. Poniższy przykład kodu demonstruje, jak wczytać wiadomość e‑mail, wyodrębnić jej zewnętrzne zasoby HTML jako załączniki, opcjonalnie obsłużyć zdarzenia renderowania zasobów, a następnie zapisać wiadomość jako plik HTML przy użyciu Aspose.Email dla .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);