Wysyłanie E-mail
Witam w kolejnym poradniku, dziś dowiemy się jak wysłać wiadomość E-mail za pośrednictwem naszego programu. Skorzystamy z przestrzeni nazw System.Net.Mail więc najpierw zaimportujemy tą przestrzeń poleceniem:Imports System.Net.MailPrzy okazji muszę was powiadomić, że przeszedłem obecnie na nowszą wersję Visual Studio Community 2015. Niczego to jednak nie zmienia w naszym poradniku.
Teraz gdy mamy już aktywną przestrzeń nazw Net.Mail to napiszmy sobie kod dla przycisku:
Dim Smtp_Server As New SmtpClient Dim mail As New MailMessage()Mamy zatem zadeklarowane 2 obiekty, serwer SMTP oraz strukturę wiadomości email. Teraz otworzymy sobie blok Try Catch i w nim spróbujemy zdefiniować naszą nową wiadomość i spróbujemy ją wysłać. Blok Try Catch jest nam potrzebny aby wyłapał nam błędy odpowiedzi serwera, lub też informował nas np o braku połączenia z internetem. Przyjmijmy, że naszym testowym serwerem do sprawdzenia naszej wysłanej wiadomości będzie serwer WP (Wirtualna Polska). Napiszmy więc kod:
Try Smtp_Server.UseDefaultCredentials = False Smtp_Server.Credentials = New Net.NetworkCredential("twój login", "twoje hasło") Smtp_Server.Port = 587 Smtp_Server.Host = "smtp.wp.pl" Smtp_Server.Timeout = 5000 mail = New MailMessage() mail.Priority = MailPriority.High mail.From = New MailAddress("twój adres email") mail.Bcc.Add("adres odbiorcy") mail.Subject = "temat wiadomości" mail.IsBodyHtml = False mail.Body = "Tekst wiadomości" Smtp_Server.Send(mail) MessageBox.Show("Wiadomość wysłana!") Catch ex As Exception MessageBox.Show(ex.ToString) End TryJak nietrudno się domyślić linie kodu 2-6 odpowiadają za skonfigurowanie serwera wychodzącego SMTP, następne linie definiują samą wiadomość, po czym linia 14 wysyła tak skonfigurowaną wiadomość do adresata. Kolejna linia za pomocą MessageBox'a informuje o prawidłowo zakończonym procesie lub przeskakuje do Exception i wyświetla rodzaj problemu podczas wysyłania.
Gdyby ktoś próbował w ten sposób do wysyłania poczty ustawić serwer Gmail to od razu może o tym zapomnieć. Serwery Gmail akceptują w tej chwili wyłącznie własne aplikacje do wysyłania poczty. Tłumaczą to względami bezpieczeństwa. Każdy jednak tłumaczy sobie to na swój sposób. Wracając do tematu.
Do tak skonfigurowanej wiadomości można w prosty sposób dołączyć jeszcze Attachment czyli załącznik. Żeby sobie trochę utrudnić życie a wam ułatwić, stworzymy sobie nowy przycisk i dodamy do formy kontrolkę ListView, która zrobi nam listę załączników oraz kontrolkę OpenFileDialog. Napiszę więc kod na nowo, dodając potrzebne zmienne, i kontrolki. Poniżej przedstawię pełny kod:
Imports System.Net.Mail Public Class form1 Private ListAttachments As ArrayList Private Sub BtnSend_Click(sender As Object, e As EventArgs) Handles BtnSend.Click Dim Smtp_Server As New SmtpClient Dim mail As New MailMessage() Try Smtp_Server.UseDefaultCredentials = False Smtp_Server.Credentials = New Net.NetworkCredential("twój login", "twoje hasło") Smtp_Server.Port = 587 Smtp_Server.Host = "smtp.wp.pl" Smtp_Server.Timeout = 5000 mail = New MailMessage() mail.Priority = MailPriority.High mail.From = New MailAddress("twój adres email") mail.Bcc.Add("adres odbiorcy") mail.Subject = "temat wiadomości" mail.IsBodyHtml = False mail.Body = "Tekst wiadomości" If Not IsNothing(ListAttachments) Then Dim mailAttachment As Attachment For Each mailAttachment In ListAttachments mail.Attachments.Add(mailAttachment) Next End If Smtp_Server.Send(mail) MessageBox.Show("Wiadomość wysłana!") Catch ex As Exception MessageBox.Show(ex.ToString) End Try End Sub Private Sub BtnAttachment_Click(sender As Object, e As EventArgs) Handles BtnAttachment.Click With OpenFileDialog1 .Filter = "All Files (*.*)|*.*|HTML Files (*.htm;*.html)|*.htm|Microsoft Mail Documents (*.msg)|*.msg|Word Documents (*.doc)|*.doc|Excel Files(*.xl*)|*.xl*|Excel Worksheets (*.xls)|*.xls|Excel Charts (*.xlc)|*.xlc|PowerPoint Presentations (*.ppt)|*.ppt|Text Files (*.txt)|*.txt" .FilterIndex = 1 If .ShowDialog() = Windows.Forms.DialogResult.OK Then If IsNothing(ListAttachments) Then ListAttachments = New ArrayList() ListBoxAtt.Items.Clear() End If ListAttachments.Add(New Attachment(.FileName)) Dim strFileName() As String = .FileName.Split(New Char() {CChar("\")}) System.Array.Reverse(strFileName) ListBoxAtt.Items.Add(strFileName(0)) End If End With End Sub End ClassW przycisku BtnAttachment zdefiniowaliśmy sobie na początku przykładowy filtr rozszerzeń plików, które można będzie dołączyć do naszego maila. Następnie otwieramy sobie kontrolkę OpenFileDialog i każdy kolejny plik dodajemy sobie osobno do naszej listy załączników. Następnie jeśli funkcja sprawdzająca z przycisku BtnSend wykryje, że lista nie jest pusta to zdefiniuje nowy obiekt Attachment i za pomocą pętli For Each doda każdy element ze zdefiniowanej tablicy ArrayList.
Myślę, że wyczerpaliśmy w tym poradniku temat wysyłania E-maili. Zapraszam więc w przyszłości do kolejnych poradników.
Utworzono 15.10.2015
Zmodyfikowano 05.05.2016
Dorzucam przykładową solucję do odtworzenia w swoim VS
Link do solucji
Można prosić o fotkę jak wyglądałaby formatka?
OdpowiedzUsuńCzytając kod widzę przyciski:
BtnSend - wyślij
BtnAttachment - listview załącznik
dalej..
mail.Bcc.Add - textbox adresu
mail.Subject - textbox temat
mail.Body - textbox wiadomości
Dobrze rozumiem?
Pozdrawiam
andrew
Witaj, dobrze rozumiesz. Wrzuciłem na szybko zrobioną solucję do pobrania, mam nadzieje, że zadziała :) Pozdrawiam
Usuń:) Dzięki
UsuńNie rozumiałem za bardzo "listview", można by było pokombinować, żeby "BtnAttachment"
otwierał mini formatkę z "listview".
Pozdrawiam
andrew
Tego szukałem, mam jednak problem z wysłaniem maila, dostaję komunikat Time Out, poczta na wp zmieniałem też port na 465, w innych to samo. Co może być przyczyną ?
OdpowiedzUsuńwszystkie dane podalem poprawne nawet poczta nadawcy taka sama (wp) i jest timed out
OdpowiedzUsuń