70-536: Creating an E-mail Message

Poniższy artykuł pochodzi z serii Przygotowań do egzaminu 70-536.

image

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

Tagi: , ,

Pingbacks and trackbacks (1)+

Add comment




  Country flag
biuquote
  • Comment
  • Preview
Loading


Eastgroup.pl na facebooku