sobota, 26 grudnia 2009

Wysyłanie meili w .NET

Wysyłanie maila w .NET to jedna z prostszych czynności jakie możemy wymagać od naszego programu.

1. Przestrzeń System.Net.Mail

Przestrzeń ta zawiera wszystko co jest nam potrzebne aby w łatwy i szybki sposób wysłać maila. Najczęściej używanymi klasami z pewnością są:
Attachment – reprezentuje załącznik wiadomości
MailAddress – klasa reprezentująca mail nadawcy lub odbiorcy
MailMessage – reprezentuje wiadomość do wysłania
SmtpClient – pozwala na wysłanie utworzonego maila protokołem SMTP
SmtpException – wyjątek w przypadku błędu podczas wysyłania wiadomości


2. Tworzenie wiadomości email

 
Korzystając z wymienionych wcześniej klas możemy utworzyć naszą wiadomość. Rozpoczniemy od utworzenia obiektu klasy MailMessage:
    public MailMessage();
    public MailMessage(MailAddress from, MailAddress to);
    public MailMessage(string from, string to);
    public MailMessage(string from, string to, string subject, string body);

Jak widać mamy do dyspozycji 4 konstruktory. Parametry które przyjmują to:
From – mail osoby wysyłającej
To – mail osoby do której kierujemy wiadomość
Subject – temat wiadomości
Body – treść wiadomości
Wszystkie te parametry można ustawić po utworzeniu obiektu klasy MailMessage:
            MailMessage message = new MailMessage();
            //właściwość To jest typu MailAdressCollection tak więc możemy
            //dodać wiele osób do których kierujemy naszą wiadomość:
            //message.To.Add(new MailAddress("do_kogo1@o2.pl");
            //message.To.Add(new MailAddress("do_kogo2@o2.pl");
            //message.To.Add(new MailAddress("do_kogo3@o2.pl");
            message.To.Add(new MailAddress("do_kogo@o2.pl"));
            message.From = new MailAddress("od_kogo@o2.pl");
            message.Subject = "Temat naszej wiadomości";
            message.Body = "Treść naszej wiadomości";

Oprócz tych podstawowych właściwości możemy także ustawić takie rzeczy jak:
            //Wysłanie ukrytej kopii
            message.Bcc.Add(new MailAddress("do_kogo@o2.pl"));
            //Wysłanie kopi
            message.CC.Add(new MailAddress("do_kogo@o2.pl"));
            //Powiadomienie o stanie wysłania; opóźnienie, dostarczenie, niepowodzenie
            message.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
            //Priorytet wiadomości
            message.Priority = MailPriority.High;


3. Dodawanie załączników do wiadomości
 
Wiele wysyłanych przez nas wiadomości zawiera dodatkowe dane w postaci zdjęć, plików PDF czy też innego rodzaju dane audio/wideo. Aby do wiadomości dodać załączniki tworzymy obiekty klasy Attachment a w jego konstruktorze podajemy ścieżkę do pliku na dysku:
            message.Attachments.Add(new Attachment(@"C:\Users\Patryk\Documents\CV.docx"));
            message.Attachments.Add(new Attachment(@"C:\Users\Patryk\Documents\Lista_Zakupow.docx"));



4. Wsparcie dla znaczników HTML
 
Aby włączyć w wiadomości wsparcie dla znaczników HTML należy najpierw ustawić właściwość IsBodyHtml na true:
message.IsBodyHtml = true;
Po tej operacji możemy używać znaczników HTML w naszej wiadomości:
message.Body = @"<html><body><h1>Hello</h1><br><br>Co u ciebie słychać?</body></html>";
Aby dodać jakąś grafikę bezpośrednio w wiadomości (nie jako załącznik) należy skorzystać z klas AlternateView oraz LinkedResource:
            //treść naszej wiadomości ze znacznikami HTML
            string body = "<html><body><h1>Hello</h1><br><br>Co u ciebie słychać?<br>Tutaj moje zdjęcie z zeszłych wakacji: <br> <img src=\"cid:Zd1\"></body></html>";
            //tworzymy alternatywny widok
            AlternateView htmlView = AlternateView.CreateAlternateViewFromString(body);
            //wybieramy zdjęcie które zostanie dodane do naszej wiadomości HTML
            LinkedResource image = new LinkedResource(@"C:\Users\Patryk\Pictures\przyklad_graphic.png", "image/png");
            //nadajemy Id naszemu zdjęciu (później wstawiamy je jako cid:"Id"
            image.ContentId = "Zd1";
            htmlView.LinkedResources.Add(image);
            //dodajemy widok do wiadomości
            message.AlternateViews.Add(htmlView);



5. Wysyłanie wiadomości
 
Czas teraz na najważniejszą część czyli wysłanie wiadomości. Wysyłamy za pomocą protokołu SMTP więc tworzymy najpierw obiekt tej klasy:
SmtpClient smtp = new SmtpClient("poczta.o2.pl", 587);
W konstruktorze jak widać podałem port SMTP wykorzystywany przez o2.pl oraz nazwę serwera.
Jeśli serwer wymaga uwierzytelnienia, należy stworzyć obiekt klasy NetworkCredential i w konstruktorze podać wymagane parametry:
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential("uzytkownik", "haslo");
Na końcu oczywiście wysyłamy nasze dzieło:
smtp.Send(message);

Jeśli zrobiliśmy wszystko zgodnie z instrukcją, nasza wiadomość powinna zostać wysłana bez żadnych błędów.
Wracając jeszcze do portów SMTP to należy sprawdzić jaki jest używany przez danego dostawcę poczty. Najczęściej to 587 od kiedy TP SA zablokowała port 25.

Tyle odnośnie wysyłania wiadomości. Miłego spamowania J

Brak komentarzy:

Prześlij komentarz