Send SMTP Emails using in C#

Spread the word

Here is a simple article that explains how to send emails using C# and also make use of threading in .Net to send emails to improve performance

Namespaces

using System.Net; 
using System.Net.Mail;

MailMessage Class Properties

Following are the required properties of the mail message class.

From – Sender’s email address

To – Recipient(s) Email Address

CC – Carbon Copies

BCC – Blind Carbon Copies

Subject – Subject of the Email

Body – Body of the Email

IsBodyHtml – Specify whether body contains text or HTML mark up.

Attachments – Attachments if Any.

ReplyTo – ReplyTo Email address.

Creating a MailMessage Object

MailMessage mm = new MailMessage();
mm.From = new MailAddress("username@gmail.com");
mm.Subject = "Hello";
mm.Body = "<p>Body</p>";
mm.IsBodyHtml = true;

SMTP Class Properties

Following are the properties of the SMTP class.

Host – Your SMTP Server

EnableSsl – Specify whether you host accepts SSL Connections.

UseDefaultCredentials – Set to True inorder to allow authentication based on the Credentials of the Account used to send emails

Credentials – Valid login credentials for the SMTP server

Port – Port Number of the SMTP server

Below code describes how the above properties are applied

smtp.Host = "smtp.gmail.com";
smtp.EnableSsl = true;
System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
NetworkCred.UserName = "username@gmail.com";
NetworkCred.Password = "xxxxxxxxx";
smtp.UseDefaultCredentials = true;
smtp.Credentials = NetworkCred;
smtp.Port = 587;

Send Email

The method Smtp.Send(..) is used to send the email. See the example below

smtp.Send(mm);

Send Email using Background Thread

Sending Email requires some amount of time. So many times user has to wait for the page to load while the mail is being sent. And if the server is not reachable the code will try to send email until timeout.

To avoid that the email can be sent using a background thread and the user can be displayed a message immediately without delay.

Import the following Namespace

using System.Threading;

Send email using a Background thread

Thread threadSendMails;
threadSendMails = new Thread(delegate()
{
    sendemail("username@gmail.com", "receiver@abc.com", "Hello", "<p>Body</p>", "C:\\MyDoc.txt", true);
});
threadSendMails.IsBackground = true;
threadSendMails.Start();

Download C# Source code