Introduction
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.
Background
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.
Step One
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];
The System.Net.Mail
namespace provides four classes namely SmtpClient
, MailMessage
, MailAddress
and Attachment
which will be used for sending email. In this step, we create instances of SmtpClient
, MailMessage
and 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.
Step Two
MailClient.Host = ConfigurationManager.AppSettings["EmailHost"];
MailClient.Port = Convert.ToInt32(ConfigurationManager.AppSettings["EmailPort"]);
MailClient.Credentials = new NetworkCredential
(ConfigurationManager.AppSettings["EmailUsername"], ConfigurationManager.AppSettings["EmailPassword"]);
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.
Settings (web.config)
<appSettings>
<add key="EmailFrom" value="tester000@gmail.com"/>
<add key="EmailUsername" value="tester000@gmail.com"/>
<add key="EmailPassword" value="tester1234"/>
<add key="EmailHost" value="smtp.gmail.com"/>
<add key="EmailPort" value="587"/>
</appSettings>
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.
Step Three
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);
Email.To.Add(ToMailAddress[i]);
}
Now all the options required for sending email are set the Sender
, Recipients
, Subject
and Body
. Since there can be multiple Recipients
, a for
loop all of them to MailMessage
.
Step Four
if (EmailDetails.EmailAttachments!=null)
{
Attachment EmailAttachment = null;
for (int i = 0; i < EmailDetails.EmailAttachments.Length; i++)
{
EmailAttachment = new Attachment(EmailDetails.EmailAttachments[i]);
Email.Attachments.Add(EmailAttachment);
}
}
Now all attachments are added to the MailMessage
. If there are no attachments, pass null
and the attachment adding step is skipped.
Step Five
MailClient.Send(Email);
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.
Method Call
ResultLBL.Text = SLEmail.SendEmail(ToTBX.Text, "Tester",
SubjectTBX.Text, BodyTBX.Text, null, true).ToString();
Parameters
- Recipient's Email
- Recipient's Name
- Subject
- Body of Email
- Attachments
- 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.
History
I would welcome suggestions from all of you. Also, I am planning to enhance this library with more capabilities.