This tutorial is going to show you how to make a program which can send emails.
I've created this for a console application, but that's not necessary.
First we need to import this:
Code:Imports System.Net.Mail
Now we start by making a Sub, all code will be located in the same sub.
Code:Private Sub SendEmail(ByVal MailFrom As String, ByVal MailPass As String, _ ByVal MailTo As String, ByVal MailSubj As String, _ ByVal MailText As String, ByVal MailFromName As String, _ ByVal MailToName As String, _ Optional ByVal MailAttach As String = "")
Here we got:
MailFrom Your mail address
MailPass Your password
MailTo the person who you want to send the mail to's email address
MailSubj The subject of the email
MailText the text in the email
MailFromName the name which is showed as the sender
MailToName the name which is showed as the target
MailAttach files to attach with the email, sepperated with commas
Now we need to test all the variables, first:
If there was an empty string as Subject we replaced it with "No Subject".Code:If MailSubj = "" Then MailSubj = "No Subject" End If
Then we need to test the email addresses:
First we tested if the Target's Email wasn't an empty string, the we tested the Sender's email and searched for the right MailServer (I only know gmails and hotmails. You can send to everyone though).Code:If MailTo = "" Then Console.WriteLine("Error.....You must enter a Email Adress as target...") Exit Sub End If Dim MailServer As String = "" If MailFrom = "" Then Console.WriteLine("Error.....You must enter a Email Adress as sender...") Exit Sub ElseIf MailFrom.ToLower.EndsWith("@gmail.com") Then MailServer = "smtp.gmail.com" ElseIf MailFrom.ToLower.EndsWith("@hotmail.com") Then MailServer = "smtp.live.com" Else Console.WriteLine("Error.....Unsupported host...") Exit Sub End If
Then we check if the password exists:
Code:If MailPass = "" Then WriteLine("Error.....You must enter your password...") Exit Sub End If
Now we're creating two variables as mail addresses, we got Try,catch blocks if the email addresses shouldn't be valid:
Code:Dim mTo As System.Net.Mail.MailAddress Try Dim AdressTo As New System.Net.Mail.MailAddress(MailTo, MailToName) mTo = AdressTo Catch Console.WriteLine("Error.....Invailed Target Adress") Exit Sub End Try Dim mFrom As System.Net.Mail.MailAddress Try Dim AdressFrom As New System.Net.Mail.MailAddress(MailFrom, MailFromName) mFrom = AdressFrom Catch Console.WriteLine("Error.....Invailed Sender Adress") Exit Sub End Try
Now with a simple code we create the message and adds the subject and the text:
Code:Dim NEWMail As New MailMessage(mFrom, mTo) NEWMail.Body = MailText NEWMail.Subject = MailSubj
Now we are going to add attachments, if their are any:
Code:If MailAttach <> "" Then Dim Attach As String = "" For Chars As Integer = 0 To MailAttach.Length - 1 If MailAttach(Chars) = "," Or (Chars = MailAttach.Length - 1 And Attach <> "") Then Try NEWMail.Attachments.Add(New Attachment(Attach)) Attach = "" Catch Console.WriteLine("Couldn't add the attachment") Exit Sub End Try Else Attach &= MailAttach(Chars) End If Next End If
We just split the string to different attachment and then tried to add them as an attachment to the email.
We need to create a SmtpClient, It's it which sends the mail:
Code:Dim client As New SmtpClient(MailServer, 587) client.EnableSsl = True client.Credentials = New Net.NetworkCredential(MailFrom, MailPass)
Now we only need to add the actual sending:
Code:Console.WriteLine("Sending email...") Try client.Send(NEWMail) Catch Console.WriteLine("Error.....Failed to send the Email...") Exit Sub End Try Console.WriteLine("Email was sent sucessfully...")
That's it!! I will show an example how to use this:
Code:Sub Main() SendEmail("MyMail@hotmail.com", "Password", "YourMail@hotmail.com", "Test Subject", "This is a text", "Me", "You", "C:\Test.txt,C:\Test2.txt") End Sub
If you have any questions, feel free to ask.
+rep, and very nicely done.
Impressive!
Very well written.
One question: what if you wanted this function to work with all domains?
+rep for you.![]()
You need to know their host address (or what to call them, like "smtp.gmail.com" or "smtp.live.com"). And then you need to add them where you test the Sender's email (see code block #4).
If's just to search the web for "SMTP Host names" and you will get many result, here's a list I found:
Internet Provider SMTP Host name
America Online aol.com
AT&T Business Internet Services mail.attbi.com
CalWeb smtp.calweb.com
Comcast Cable smtp.comcast.net
cwnet.com mail.cwnet.com
Davis Community Network smtp.dcn.davis.ca.us
DirectConnect smtp.directcon.net
Earthlink smtp.earthlink.net
MSN smtp.msn.com
Mindspring smtp.mindspring.com
Mother.com mail.mother.com
Netcom smtp.netcom.com
Pipeline smtp.earthlink.net
River City Internet mail.rcip.com
Sprynet smtp.earthlink.net
SureWest smtp.surewest.net
PSINet bbr0-f1.sna.com
SBC smtp.sbcglobal.net
StarPower smtp.starpower.net
Tomato Web mail.tomatoweb.com
Verizon smtpout.verizon.net
Okay cool!
What you have is fantastic!!!!!![]()
Ok?
I am getting two errors on this.
First top one
It says "Statement not valid in a namespace"Code:Private Sub SendEmail(ByVal MailFrom As String, ByVal MailPass As String, _ ByVal MailTo As String, ByVal MailSubj As String, _ ByVal MailText As String, ByVal MailFromName As String, _ ByVal MailToName As String, _ Optional ByVal MailAttach As String = "")
and then the second one is at the end with same error
Sub main has the red line on the second code.Code:Sub Main() SendEmail("MyMail@hotmail.com", "Password", "YourMail@hotmail.com", "Test Subject", "This is a text", "Me", "You", "C:\Test.txt,C:\Test2.txt") End Sub
Any help please?
Thanks
Last edited by CriticalError; 04-14-2010 at 06:08 AM.
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks