Poniższy artykuł pochodzi z serii Przygotowań do egzaminu 70-536.
E-mail jest popularnym mechanizmem komunikacji. Framework .NET zawiera przestrzeń nazw System.Net.Mail, która zawiera klasy wspomagające tworzenie i wysyłanie wiadomości e-mail. W tym artykule skupimy się wyłącznie na tworzeniu wiadomości. Następna lekcja będzie o wysyłaniu.
Podstawowa wiadomość
Aby wysłać wiadomość należy utworzyć obiekt MailMessage, określić nadawcę, odbiorcę, tytuł (ang. subject) i treść wiadomość (ang. body). Klasa MailMessage zawiera kilka konstruktorów. Najprostszy pozwala nam utworzyć wiadomość w jednym wierszu kodu. Bardziej zaawansowane wiadomości, określenie wielu odbiorców czy dodanie załączników wymaga więcej kodu. Prosty przykład:
1: MailMessage m = new MailMessage("from@example.com", "to@example.com", "Subject.", "Body.");
Nadawcę i odbiorcę możemy podać jako instancje obiektu MailAddress, co pozwala nam podać dodatkowo m.in. nazwę użytkownika.
Gdybyśmy chcieli ustawić wielu odbiorców należy utworzyć obiekt MailMessage bez parametrów, a następnie dodać obiekty MailAddress do właściwości MailMessage.To. Należy także ustawić pola From i Subject:
1: MailMessage m = new MailMessage();
2: m.From = new MailAddress("tomek@example.com", "Tomasz Raz");
3: m.To.Add(new MailAddress("janek@test.com", "Jan Dwa"));
4: m.To.Add(new MailAddress("ben@example.com", "Benia Trzy"));
5: m.Subject = "Najnowsza oferta handlowa.";
6: m.Body = "Super okazja! Kolejna promocja Viagry!";
Można ustawić także pola Cc i Bcc.
Dodajmy załącznik
W celu dodania pliku należy utworzyć instancję klasy Attachment i dodać ją do kolekcji MailMessage.Attachments. Załącznik można dodać z lokalnego systemu plików podając nazwę pliku, lub korzystając z obiektu Stream. Przykłady:
1: MailMessage m = new MailMessage();
2: m.Attachments.Add(new Attachment(@"C:\windows\win.ini"));
Poniższy przykład demonstruje wykorzystanie Stream a dodatkowo określanie typu MIME:
1: MailMessage m = new MailMessage();
2: Stream sr = new FileStream(@"C:\Attachment.txt", FileMode.Open, FileAccess.Read);
3: m.Attachments.Add(new Attachment(sr, "myfile.txt", MediaTypeNames.Application.Octet));
Wiadomości HTML
Utworzenie wiadomości HTML sprowadza się do wstawienia kodu HTML w pole Body i ustawienia pola MailMessage.IsBodyHtml na true:
1: MailMessage m = new MailMessage();
2: m.From = new MailAddress("lance@contoso.com", "Lance Tucker");
3: m.To.Add(new MailAddress("burke@contoso.com", "Burke Fewel"));
4: m.Subject = "Testing HTML";
5: // Ustawienie wiadomości
6: m.Body = "<html><body><h1>My Message</h1><br>This is an HTML message.</body></html>";
7: m.IsBodyHtml = true;
8: // Wysłanie wiadomości
9: SmtpClient client = new SmtpClient("smtp.contoso.com");
10: client.Send(m);
Jeśli chcemy dodać obrazki do wiadomości musimy utworzyć obiekt klasy AlternateView oraz LinkedResource dla każdego obrazka:
1: string htmlBody = "<html><body><h1>Picture</h1><br><img src=\"cid:Pic1\"></body></html>";
2: AlternateView avHtml = AlternateView.CreateAlternateViewFromString(htmlBody, null, MediaTypeNames.Text.Html);
3:
4: // Create a LinkedResource object for each embedded image
5: LinkedResource pic1 = new LinkedResource("pic.jpg", MediaTypeNames.Image.Jpeg);
6: pic1.ContentId = "Pic1";
7: avHtml.LinkedResources.Add(pic1);
8:
9: // Create an alternate view for unsupported clients
10: string textBody = "You must use an e-mail client that supports HTML messages";
11: AlternateView avText = AlternateView.CreateAlternateViewFromString(textBody, null, MediaTypeNames.Text.Plain);
12:
13: // Add the alternate views instead of using MailMessage.Body
14: MailMessage m = new MailMessage();
15: m.AlternateViews.Add(avHtml);
16: m.AlternateViews.Add(avText);
17:
18: // Address and send the message
19: m.From = new MailAddress("lance@contoso.com", "Lance Tucker");
20: m.To.Add(new MailAddress("james@contoso.com", "James van Eaton"));
21: m.Subject = "A picture using alternate views";
22: SmtpClient client = new SmtpClient("smtp.contoso.com");
23: client.Send(m);
W przykładzie można zaobserwować, że utworzonemu obiektowi pic1 przypisujemy ContentID o wartości Pic1. W treści strony odwołujemy się do niego za pomocą znacznika postaci <img src="cid:Pic1"> .
Jeśli chcemy wysłać wiadomość HTML, którą mogą przeglądać osoby, których klient poczty nie obsługuje tego formatu powinniśmy użyć klasy AlternateView. Dostarczamy wiele wersji naszej wiadomości, w tym jedną tekstową.
Kolejny artykuł z serii to 70-536: Sending E-mail