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 Try
Jak 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 Class
W 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ń