Visual basic ile mail nasıl yolluya bilirim !

yergokTurk

Yeni üye
17 Şub 2007
6
0
Merhabalar bi program yapıyorum ama yaptıgım programda mail de yollattırmam gerekiyo yalnız onun kodlamasını bilmiyorum , bilen arkadaslar varsa ve yardımcı olursa sevinirim.
Simdiden Tesekkurler
 
Visual Basic ile Email Göndermek

Forumda gördüğüm bir soru üzerine karar vermiştim bu yazıyı yazmaya ancak zaman bulamadığım için birkaç gün gecikti. O sorunun sahibine olmasa da aynı konuda yardıma ihtiyaç duyabilecek arkadaşlar için Visual Basic ile mail gönderme işlemini becerebildiğimce basite indirgeyerek anlatıyorum. Umarım yararlı olur.

Bu programda 1 form kullanacağız ve formumuzun üzerinde 5 adet textbox olacak ve bunlar yukarıdan aşağıya sırasıyla şu şekilde adlandırılacak: txtserverdomain, txtfromemail, txttoemail, txtsubject, txtmessage. Neyin ne olduğunu karıştırmamak için metin kutularının karşısına 5 adet label ekleyerek caption değerlerini şu şekilde değiştirin (tekrar yukarıdan aşağıya ve sırayla: Sunucu adresi, Gönderen, Kime, Konu, Mesaj. Son olarak iki adet command button ekleyin ve birinin üzerindeki metni "Gönder" diğerininkini "Çıkış" olarak değiştirin. Üzerinde Gönder yazan command buttonun ismini cmdSend olarak diğerininkini ise cmdExit olarak değiştirin. Son olarak form üzerine bir adette Microsoft Winsock kontrolü ekleyin ve bunuda "w" olarak adlandırın. Form üzerindeki metin kutularını, label leri ve command button ları gözünüze hoş görünecek sekilde form üzerinde yerleştirin. İşin zor kısmı bitti.

Şimdi aşağıdaki kodu alarak değiştirmeden formunuzun kod penceresine yapıştırın. Daha sonra nerede ne yaptığımızı okuyun..

Option Explicit
Private Response As String

Sub SendEmail(ServerDomain As String, FromEmail As String, ToEmail As String, Subject As String, Body As String)

w.LocalPort = 0

If w.State <> sckClosed Then w.Close

w.Protocol = sckTCPProtocol
w.RemoteHost = ServerDomain
w.RemotePort = 25
w.Connect

WaitForResponse ("220")

w.SendData "HELO " & ServerDomain & vbCrLf
WaitForResponse ("250")

w.SendData "MAIL FROM: <" & FromEmail & ">" & vbCrLf
WaitForResponse ("250") 'wait for response

w.SendData "RCPT TO: <" & ToEmail & ">" & vbCrLf
WaitForResponse ("250") 'wait for response

w.SendData ("data" & vbCrLf)

WaitForResponse ("354")
w.SendData "From: " & FromEmail & vbCrLf
w.SendData "X-Mailer: BASTON SMTP Mailer" & vbCrLf
w.SendData "To: " & ToEmail & vbCrLf
w.SendData "Subject: " & Subject & vbCrLf

w.SendData Body & vbCrLf

w.SendData "." & vbCrLf
WaitForResponse ("250")

w.SendData "quit" & vbCrLf
WaitForResponse ("221")

w.Close
MsgBox "Mesajınız başarıyla gönderildi.", vbExclamation, "Mesajını Gönderildi."
End Sub
Sub WaitForResponse(ResponseCode As String)
Dim Reply As Integer
Dim Start As Single
Dim Tmr As Single
Start = Timer
While Len(Response) = 0
Tmr = Start - Timer
DoEvents
If Tmr > 10 Then
MsgBox "Hata:" + vbCrLf + "İşlem zamanaşımına uğradı!", vbExclamation, "İşlem Başarısız"
Exit Sub
End If
Wend
While Left(Response, 3) <> ResponseCode
DoEvents
If Tmr > 10 Then
MsgBox "Hata:" + vbCrLf + "Geçersiz bir yanıt alındı: " + Response + vbCrLf + "Expected code: " + ResponseCode, vbExclamation, "İşlem Başarısız."
Exit Sub
End If
Wend
Response = ""
End Sub
Private Sub cmdExit_Click()
Unload Me
End
End Sub
Private Sub cmdSend_Click()
SendEmail txtServerDomain, txtFromEmail, txtToEmail, txtSubject, txtMessage
End Sub
Private Sub w_DataArrival(ByVal bytesTotal As Long)
w.GetData Response
End Sub

03 nolu satırda email gönderme işlemini gerçekleştirecek Sub'ı kodlamaya başlıyoruz. Gördüğünüz gibi email gönderme işleminde bazı parametreler kullanıyoruz ve bu satırda kullanacağımız parametrelerin kullanacağı veri türlerini tanımlıyoruz. Bunlar: ServerDomain, FromEmail, ToEmail, Subject ve Body.

06 nolu satırda Winsock nesnesine yerel port olarak 0'ı gösteriyoruz. Bunu yapmazsak programın her çalıştırılışında 1 email gönderebiliriz.

08 nolu portta eğer winsock açık ise, kapatıyoruz.
10. satırda programa TCP/IP protokolünü kullanacağımızı belirtiyoruz.
11. satırda kullanacağımız mail sunucusunun adresini belirtiyoruz.
12. satırda mail sunucusuna bağlanmak istediğimiz bağlantı noktasını belirliyoruz. smtp sunucuları varsayılan olarak 25 numaralı portu kullandıklarından bizde 25 numaralı portu kullanmak istediğimizi belirtiyoruz. Ancak bu portu değiştirmeniz gerekebilir. Örneğin bizim networkümüzdeki mail sunucusu farklı bir port kullandığından bu programı kendi mail sunucumuzu kullanarak mail yollamak için kullanmak istediğimde port numarasını bizim mail sunucumuzun kullandığı portla değiştirmem gerekiyor.
13. satırda karşı bilgisayarla bağlantı kuruyoruz.

Port numaraları değişebilsede asla değişmeyecek bazı şeyler vardır. Pek güçlü bir cümle olmasa da anlatmak istediğim; biz mail sunucumuzun konfigurasyonu esnasında kullanacağı portu belirleyebiliriz ancak smtp protokolünün standart olarak kullandığı mesaj kodlarını değiştiremeyiz. Gördüğünüz gibi programımız 15. satırda karşı bilgisayardan bağlantımızın onaylandığına dair bir mesaj bekliyoruz ve bu mesajın kodu 220.
Programımız 220 nolu mesajı alana kadar bekleyecek, bu mesajın karşı bilgisayardan gelmemesi halinde işlemimiz Time Out olacaktır. Karşı taraftan 220 nolu mesaj geldi mi? Devam edelim o zaman..

17. satırda winsock nesnesi ile sunucuya HELO mesajı gönderiyoruz ve mesajımıza karşılık 250 numaralı mesajı bekliyoruz.
Aynı şekilde buradada programımız 250 nolu mesajı alana kadar bekleyecektir.

20. satırda maili gönderenin adresini sunucuya iletiyoruz ve işlemimize karşılık bir yanıt bekliyoruz.

23. satırda mailin kime gittiğini bildiriyoruz.

26. satırda sunucuya başlık "header" ve mesaj bilgilerini iletmeye başlayacağımızı bildiriyoruz ve 354 nolu mesajı bekliyoruz.

29. satırda maili gönderenin email adresini,
30. satırda maili gönderen yazılıma ait bilgileri (bu bilgiyi kendi programınızın ismiyle değiştirin. Tabii baston diye bir email yazılımı hazırlıyorsanız böylede kalabilir),
31. satırda mailin kime gittiğini,
32. satırda mailin başlığını
34. satırda txtMessage adlı text kutusundaki mesajı, yani mail metnini gönderiyoruz.
36. satırda veri/başlıkları sonlandırıyoruz ve bir sonraki satırda 250 nolu mesajın sunucudan gelmesini bekliyoruz.

39. satırda sunucuya quit mesajı gönderiyor ve sunucuya bağlantıyı kapatma isteğimizi bildiriyoruz.
40. satırda sunucudan 221 kodlu mesajı yani sunucunun oturumumuzu kapattığına dair mesajı bekliyoruz.
42. satırda winsock u kapatıyoruz.

Eğer işlemlerin uygulanması esnasında bir sorunla karşılaşılmışsa program bir hata mesajı verecektir. Böyle bir durumda programın hata mesajından sonra kapanmaması için hata tuzaklama kısmını hazırlamanız gerekiyor. Eğer bir hata ile karşılaşılmamış ve herşey yolunda gitmişse kullanıcıya mailin gönderildiğini bildiriyoruz.

Şimdi (sıralama biraz ters olsa da) maili gönderme işlemi esnasında kullandığımız WaitForResponse sub ını hazırlıyoruz.
Kullanacağımız değişkenleri tanımlıyoruz.
49. satırda bir timer başlatıyoruz ve başlangıç değerini start adlı değişkenimize değer olarak atıyoruz.
51. satırda işlemin başlamasından beri geçen zamanı tesbit ediyoruz.
53.satırda sunucunun bizi yanıtlamaması halinde işlemi zamanaşımına uğradığı için kesiyoruz.
57. satırdan itibaren sunucudan geçersiz bir mesaj almamız halinde programın uygulayacağı işlemleri kodluyoruz.
69. satırda programı sonlandırmak için gerekli kodu yazıyoruz.
73. satırda ise mail göndermek için gerekli komut ve parametrelerini yazıyoruz.

75. satırda (yine hatalı sıralama) mail gönderme işlemi esnasında sunucudan gelen yanıtları almak için kullanacağımız sub'ı kodluyoruz.

Hepsi bu kadar..
 

sezgin1444

Kıdemli Üye
3 Şub 2012
3,061
4
f3nr1r@R00T
BU Kodlar İle yapabilirsin

Gerekenler:1 Buton 6 Textbox

Textboxlar:

1.Textbox gönderen kişinin e postası
2.Textbox gönderenni şifresi
3.textbox:SMTP(o textboxa smtp live.com yaz)
4.Textbox Kime gönderileceği
5.Textbox Konu
6.Textbox:Mesaj

Kodlar:

ProgressBar1.Value = 5
Dim message As System.Net.Mail.MailMessage
ProgressBar1.Value = 10
Dim smtp As New System.Net.Mail.SmtpClient(TextBox3.Text, 587)
ProgressBar1.Value = 24
message = New System.Net.Mail.MailMessage(TextBox1.Text, TextBox4.Text, TextBox5.Text, TextBox6.Text)
smtp.EnableSsl = True
ProgressBar1.Value = 59
smtp.Credentials = New System.Net.NetworkCredential(TextBox1.Text, TextBox2.Text)
ProgressBar1.Value = 70
ProgressBar1.Value = 80
Try
smtp.Send(message)
ProgressBar1.Value = 100
MsgBox("Mesaj Gönderildi")
ProgressBar1.Value = 0
Catch exc As Net.Mail.SmtpException
ProgressBar1.Value = 0
MessageBox.Show("Bir sorun oluştu.", " Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
MessageBox.Show. Show("Lütfen internet bağlantınızı ve gönderici bilgilerini kontrol edip tekrar deneyiniz...", " Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.