This is a small library which will enable your website / web application to send emails instantly. This is fully tested code and provides quick integration.
Today’s application is not just software but a solution. In this solution, we always had a need to communicate to the user. There are various ways of communicating, email is one of them and is widely used. All developers must have felt the need to integrate an email sending option in their solution. If you Google, you will find various samples, tutorials and articles of doing so. They impart good amount of knowledge. However, developing email sending feature for your project will take a good amount of time.
Using the Code
The library uses a single method
SendMail for performing the email sending feature. There are five steps involved in the sending feature.
SmtpClient MailClient = new SmtpClient();
MailMessage Email = new MailMessage();
MailAddress FromMailAddress = new MailAddress(EmailDetails.EmailFrom, EmailDetails.EmailDisplayName);
MailAddress ReplyToMailAddress = new MailAddress(EmailDetails.EmailFrom, EmailDetails.EmailDisplayName);
MailAddress ToMailAddress = new MailAddress[EmailDetails.EmailTo.Length];
System.Net.Mail namespace provides four classes namely
Attachment which will be used for sending email. In this step, we create instances of
MailAddress. Here we are creating two instances of
MailAddress class to allow specify Sender's Email information and Reply to Email information separately. We have created an array of
MailAddress for Recipient's Email to allow multiple email addresses.
MailClient.Host = ConfigurationManager.AppSettings["EmailHost"];
MailClient.Port = Convert.ToInt32(ConfigurationManager.AppSettings["EmailPort"]);
MailClient.Credentials = new NetworkCredential
MailClient.EnableSsl = true;
In this step, email server details with credentials are set. All these are taking from
<appSettings>. The following settings are added to the web.config file from where the library will get the information.
<add key="EmailFrom" value="firstname.lastname@example.org"/>
<add key="EmailUsername" value="email@example.com"/>
<add key="EmailPassword" value="tester1234"/>
<add key="EmailHost" value="smtp.gmail.com"/>
<add key="EmailPort" value="587"/>
Since the library takes the settings from web.config, no changes to the code are required.
Note: The setting name should exactly be the same as mentioned in the settings block above.
Email.From = FromMailAddress;
Email.ReplyTo = ReplyToMailAddress;
Email.Subject = EmailDetails.EmailSubject;
Email.Body = EmailDetails.EmailContents;
Email.IsBodyHtml = true;
for (int i = 0; i < ToMailAddress.Length; i++)
string EmailDisplayName = string.IsNullOrEmpty
(EmailDetails.EmailToDisplayName[i]) ? "Recipient " +
i.ToString() : EmailDetails.EmailToDisplayName[i];
ToMailAddress[i] = new MailAddress(EmailDetails.EmailTo[i], EmailDisplayName);
Now all the options required for sending email are set the
Body. Since there can be multiple
for loop all of them to
Attachment EmailAttachment = null;
for (int i = 0; i < EmailDetails.EmailAttachments.Length; i++)
EmailAttachment = new Attachment(EmailDetails.EmailAttachments[i]);
Now all attachments are added to the
MailMessage. If there are no attachments, pass
null and the attachment adding step is skipped.
Status = true;
This is the final step where email is sent. The
Send method doesn't return anything. In case it fails, it throws an exception. The exception is captured and
false status is returned to the calling method. A boolean value is returned indicating whether sending was success or failure.
The attached sample contains a sample web form with the method call and also the library source code. This library can be used by adding reference to the library(DLL) in other projects.
To send email, simply call
SendEmail method as mentioned below.
ResultLBL.Text = SLEmail.SendEmail(ToTBX.Text, "Tester",
SubjectTBX.Text, BodyTBX.Text, null, true).ToString();
- Recipient's Email
- Recipient's Name
- Body of Email
- Whether the Email service uses SSL?
Points of Interest
We always look at software reusability. I used to copy paste this code in all my applications and would ideally change the Email Server Credentials and other related details in the code. I learned how I can create a library(DLL) which can be reused and made pluggable by reading the Email Server Credentials and other related details from a config file rather than editing the code.
Using class object as parameter to pass values which avoids changes to the method definition and method call. Also, we need not worry about the sequence. You can simply add members to class when you need to add parameters.
I would welcome suggestions from all of you. Also, I am planning to enhance this library with more capabilities.