Building an Email Client in VB.NET:
Sending & Receiving Emails with POP3
Hello, app designers and developers
I always wondered if I could send and receive emails using .NET technology. I was surprised to learn that .NET4 does not include a built‐in POP3 class to receive emails like Microsoft Outlook—even though Outlook uses a combination of POP3, IMAP, and SMTP to manage email communication.
I managed to complete the email sending part (although the attachment and HTML body handling are still under development). For the receiving side, I successfully connected to POP3 servers and retrieved the +OK
response from Gmail; however, the complete implementation of the email reception functionality is still a work in progress.
I developed this project on an older laptop running Windows XP SP3 using Visual Studio 2010. Despite extensive research on VB.NET POP3 resources, I mainly found C# examples that helped me capture the first step: establishing a connection and receiving the server response.
Note: Gmail’s 2-Step Verification is essential for added security. With it enabled, you must use an application-specific password (instead of your regular password) to work with external email clients. Also, always remember to use your full email address (e.g., your_username@emailserver.com
)
when configuring the client.
Email Server Settings
Hotmail/Live
- Incoming Server:
pop3.live.com
(Port 995, SSL required) - Outgoing Server:
smtp.live.com
(Port 587, TLS required)
Yahoo
- Incoming Server:
pop.mail.yahoo.com
(Port 995; SSL is optional for free accounts) - Outgoing Server:
smtp.mail.yahoo.com
(Port 465, TLS required)
Gmail
- Incoming Server:
pop.gmail.com
(Port 995, SSL required) - Outgoing Server:
smtp.gmail.com
(Port 587, TLS required)
I recommend testing with a client like Outlook first to ensure your email server settings are correct before integrating them into your custom application.
The Send E-mail Part
Below is the VB.NET code that sends an email. (Note: Modify the email addresses, credentials, and server details as needed.)
Imports System.Net.Mail
Public Class SendFrm
Dim SmtpSvr As New SmtpClient()
Dim E_mail As New MailMessage()
Dim UsrNm As String, Pwd As String, Srve As String
Dim Int_port As Integer
Private Sub SendFrm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Configure your SMTP details
UsrNm = "Your_UserName@gmail.com" ' Replace with your email address
Pwd = "Your_Password" ' Use your 2-Step Verification password or normal password
Srve = "smtp.gmail.com" ' SMTP server (for Gmail)
Int_port = 587
End Sub
Private Sub Label11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label11.Click
SmtpSvr.UseDefaultCredentials = False
SmtpSvr.Credentials = New Net.NetworkCredential(UsrNm, Pwd)
SmtpSvr.Port = Int_port
SmtpSvr.Host = Srve
SmtpSvr.EnableSsl = True
E_mail = New MailMessage()
E_mail.From = New MailAddress(UsrNm, "Your Display Name", System.Text.Encoding.UTF8)
E_mail.IsBodyHtml = False ' HTML support pending further development
E_mail.Body = "Hello, this is my first email sent from my custom client."
E_mail.To.Add(TxtFrnd.Text) ' TxtFrnd is a TextBox for the recipient's email address
E_mail.Subject = TxtSub.Text ' TxtSub is a TextBox for the email subject
SmtpSvr.Send(E_mail)
MsgBox("Mail sent successfully!")
End Sub
End Class
The Receive E-mail Part
The following VB.NET project snippet demonstrates how to connect to a POP3 server and receive responses. This is an early stage of the email reception functionality.
Imports System.IO
Imports System.Net.Sockets
Imports System.Text
Imports System.Net.Security
Public Class Form1
Dim Read_Stream As StreamReader
Dim POP3 As New TcpClient
Dim PopHost As String = "pop.gmail.com"
Dim UserName As String = "MyGmail@gmail.com"
Dim Password As String = "My2stepVerificationPass"
Dim Server_Response As String
Dim response As StreamWriter
Private Sub CmdDownload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdDownload.Click
Cursor = Cursors.WaitCursor
POP3.Connect(PopHost, 995)
TextBox1.AppendText(Cons("STAT ")) ' Uses STAT command to fetch server response
Cursor = Cursors.Default
End Sub
Function Cons(ByVal server_Command As String) As String
Dim m_buffer() As Byte = Encoding.ASCII.GetBytes(server_Command)
Dim m_sslStream As New SslStream(POP3.GetStream(), False)
m_sslStream.AuthenticateAsClient(PopHost)
Dim bytes As Integer = m_sslStream.Read(m_buffer, 0, m_buffer.Length)
Return Encoding.ASCII.GetString(m_buffer, 0, bytes)
End Function
End Class
POP3 Commands Overview
Command | Response | Example |
---|---|---|
USER <name> | +OK name is welcome here / -ERR never heard of name | USER David |
PASS <string> | +OK maildrop locked and ready | PASS test |
QUIT | +OK Server closing connection | QUIT |
STAT | +OK nn mm | STAT |
LIST | +OK scan listing follows | LIST |
RETR <msg> | +OK message follows | RETR 1 |
DELE <msg> | +OK message deleted | DELE 2 |
NOOP | +OK no transaction | NOOP |
RSET | +OK maildrop has nn messages (mmm octets) | RSET |
I'm still refining the email receiving process and error handling. Your feedback and suggestions are welcome. Happy coding!
♥ Here are some online Visual Basic lessons and courses: