Click here to Skip to main content
15,868,016 members
Articles / Programming Languages / C# 4.0

Automated Email System for Employee Entry Time Management

Rate me:
Please Sign up or sign in to vote.
4.87/5 (27 votes)
10 Feb 2013CPOL8 min read 61.4K   1.9K   45   40
Automated Mailing System for Employee Entry time management with database backup

Introduction

Every office maintains its own system to maintain the entry time of its employees in order to make sure they are maintaining office hours properly. For my case, I need to send an entry mail composed with my formal signature and the time. At my work, I usually forget to send the entry mail to the boss. So there may be some confusion whether I have attended office today on time or not. So I decided to create an application that will help me to solve my daily problem. Today, I am going to describe my way to do this.

Background

I usually forget to send my entry mail in due time. For this reason, I have decided to develop an application to do this task for me. It is actually easier for programmers to develop an app other than to memorize to do a task. That's why the task scheduler idea came up. I have also made an installer for programmers' easy use, if any one wants to use it without having programming knowledge. So let's start.

Using the Code

Eventually, I deployed all possible ways to make it user friendly. I have kept in mind that non-programmers may use this application. So I developed it in that way. In my first section, I will describe the programming methodology that I have used in my application and in the second section, I will describe how to use my application.

First Section

First of all, we need to understand the scenario of the application we are developing.

Here it is:

  1. We need to develop an application that will send mail automatically when the computer starts.
  2. We need to take input from user: the mailing address (To), network credentials and of course, the user's mail address.
  3. Then, we can add some signature or other necessary information that we want to send with the mail.
  4. Then, we will send the mail.

Now the scenario is clear about what we are going to do and I am now describing how and why we are going to do this with detailed elaboration along with the code segment.

We will start from the second point, that is, "We need to take input from user: the mailing address (To), network credentials and of course, the user's mail address. "

So here are the situations that may arise:

  • User can put wrong mail address, so we need to verify that the email address maintains the standard format.
  • Here in my case, I am taking name, email, phone and designation as inputs from the user. So I need to validate the phone number as well. At this moment, I have only allowed U.S. phone number as valid. So if you are from another country, kindly change the code to validate your phone number.

Here is the code segment for Email validation:

C#
if (!tbxEmail.Text.Equals(string.Empty))
{
   try
     {
       new System.Net.Mail.MailAddress(tbxEmail.Text);
     }
   catch (Exception ex)
     {
       MessageBox.Show("Email Not Valid" + ex);
       return;
     }
}

Here is the code for Phone Number validation:

C#
if (!tbxPhone.Text.Equals(string.Empty))
{
  string[] numbers = { tbxPhone.Text };
  //string sPattern = @"01[5-9][0-9]{8}$";
  const string sPattern = @"((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}";
  foreach (string s in numbers)
  {
     if (!System.Text.RegularExpressions.Regex.IsMatch(s, sPattern))
        {
         MessageBox.Show("Not a valid Phone Number");
         return;
        }
  }
}

If you look at the above code, you will see that I have commented out the pattern for phone number of Bangladesh. If you need to assign phone number of other countries, please add a regular expression for your phone number. That will work fine, or if this causes any problem, you can simply modify the text file of you D: drive and put your required information there (but not more that 4 paragraphs and also you have to maintain the format of the code that is name, email, phone & designation). You will be able to change everything except the mail address, you need to keep the mail address in the 2nd paragraph to perform the task properly.

So we have taken inputs from user after validating all the above criteria. Now we need to save the file. I have saved the file as "info.txt" in the D: drive of your computer. When you will run this project, it will create two files.

The first one is named "info.txt" for holding information of the user and the second one is named "date.txt" for checking if the mail has already been sent for the day.

Now we need to configure the mailing address of your application.

  1. We need to put mailing address (To) and network credentials.
  2. Mailing address (To) is required to send the mail to a particular address. That is our "To" of the typical mail protocol. Network credentials are required because we needed to send mail to a varieties of mail addresses. That's why we need to go through a mail address that I have access to. It maintains the format like below:
C#
var cred = new NetworkCredential(_credentialMail, _credentialPassword);
var mailClient = new SmtpClient("smtp.gmail.com", 587);

It means we are using gmail as SMTP client and the network credentials that you will provide in _credentialMail & _credentialPassword.

For example: Let's have 3 mail addresses like below:

Address 1: x@x.com
Address 2: y@y.com 
Address 3: z@gmail.com  Password:12345

Now think we want to send an email to <y@y.com> from <x@x.com>. So we need to put it like below to work for this example:

To: y@y.com 
Network Credential Mail Address: z@gmail.com    
Password of the Above Mail Address: 12345

We have saved this information to a text file named CredentialInfo.txt to the D: drive. Here, you need to know that I have only configured the credentials for gmail. So the Network Credential Mail Address must be a gmail address.

Here is the method that does the work to create the files:

C#
int CreateFile()
{
   if (!File.Exists(@"D:\date.txt"))
      {
           try
           {
              using (File.Create(@"D:\date.txt"))
              {
              }
              TextWriter dateS = new StreamWriter(@"D:\date.txt");
              dateS.WriteLine(DateTime.Now.ToShortDateString());
              dateS.Close();
              _createfile = 1;
           }
           catch (Exception ex)
           {
              _createfile = 0;
           }
       }
   if (!File.Exists(@"D:\info.txt"))
       {
           try
           {
              using (File.Create(@"D:\info.txt"))
              {
              }
              _createfile = 1;
           }
           catch (Exception ex)
           {
              _createfile = 0;
           }
       }
    if (File.Exists(@"D:\info.txt") && File.Exists(@"D:\date.txt"))
       {
           _createfile = 1;
       }
 return _createfile;
}

We have made the settings for our application!! Wow. Now we need to send the mail. Here is the code block to send the mail.

C#
try
 {
  TextReader tw = new StreamReader(@"D:\CredentialInfo.txt");
  _toMail = tw.ReadLine();
  _credentialMail = tw.ReadLine();
  _credentialPassword = tw.ReadLine();
  message.From = new MailAddress(_mail);
  if (_toMail != null) message.To.Add(_toMail);
  message.Subject = "Entry Time ( " + DateTime.Now.ToShortDateString() + " ) " + 
                     DateTime.Now.ToShortTimeString();
  message.BodyEncoding = Encoding.UTF8;
  message.Priority = MailPriority.Normal;
  var cred = new NetworkCredential(_credentialMail, _credentialPassword);
  var mailClient = new SmtpClient("smtp.gmail.com", 587);
  mailClient.EnableSsl = true;
  mailClient.UseDefaultCredentials = false;
  mailClient.Credentials = cred;
  mailClient.Send(message);
  MessageBox.Show("Entry Mail Sent Successfully");
 }  

You can see that we are reading the network credential information from the text file. So we need to put valid information in the text file to make it work.

I have also saved the information to a database. Here is the method to do this.

C#
void insert_database()
{
 try
  {
    _con.Open();
    _cmd.Connection = _con;
    _cmd.CommandText = @"INSERT INTO MailInfo (Name,Email,Phone,Designation,MailDate,MailTime) 
         VALUES ('" + _name + "','" + _mail + "','" + _phone + "','" + _des + "','" + 
         DateTime.Now.ToShortDateString() + "','" + DateTime.Now.ToShortTimeString() + "')";
    _cmd.ExecuteNonQuery();
   }
 catch (Exception ex)
   {
    MessageBox.Show("Inserting Error in database " + ex);
   }
}

Here is the database table design:

Image 1

Second Section

Please follow the steps below to configure the application.

Step 1: Run the project.

Step 2: Settings-> Registration -> Fill the text boxes with your information. Here is an example.

Image 2

Here are some validations that you need to be concerned about. Follow the U.S. phone format to input the phone number. Example XXX-XXX-XXXX.

Image 3

Also, you need to worry about the mail address format:

Image 4

When you will input information properly, then the registration success window will appear.

Step 3: Settings-> Configure Mailing Address -> Fill the text boxes with your information. Here is an example.

Image 5

Step 4: Go to the D drive of your computer and change the date to the previous date replacing the current date.

Step 5: Press the Send Mail button. The mail will be sent to the address you have entered to the mailing address. You will find a logo downloaded to your drive. You can also produce your own logo or your company logo. To do this, you need to put the link here.

C#
if (!File.Exists(@"D:\desme_logo.gif"))
{
  const string localFilename = @"D:\desme_logo.gif";
  using (var client = new WebClient())
  {
    client.DownloadFile("https://dl.dropbox.com/u/29122962/desme_logo.gif", localFilename);
  }
}

Change the link of the dropbox and put your own link and then put the file name everywhere I used:

@"D:\desme_logo.gif" 

I have also created a setup project. You will find everything if you download the project.

It you want to send mail when the computer starts, then you need to do the following:

Step 1: Go to project folder -> open program.cs -> add Application.Run(new auto_mail()); replacing Application.Run(new Home());

Note: There are two separate projects. Both of them are working. You need to separate the two projects by replacing Application.Run(new auto_mail()); with Application.Run(new Home()); or replacing Application.Run(new Home()); with Application.Run(new auto_mail()); To send automail, do the last one because by default, I have coded the first one.

Step 2: Build the project -> then rebuild the setup project (automail).

Step 3. Right click on the setup project -> select install -> Finish the installation.

Step 4: Goto your desktop -> you will see automail.exe run the EXE.

Step 5: If it prompts that you are not registered, then register using the procedure I mentioned earlier.

Step 6: Close the window -> change the date of the date.txt file as earlier and put the previous date of today's date -> save the file.

Step 7: Run the automail.exe again. Then the mail will be sent off now with the necessary information and the information will be saved in the database and you will see the window below if everything goes right Smile | <img src= " />

Image 7

If you want to send out your mail when the computer starts, then follow the steps below:

Step 1: My computer->right click -> manage.

Step 2: Double click on Task Schedular -> right click Task Schedular Library -> create Task. Then follow the screenshots.

Image 8

Step 3: Click on Tab Triggers- > then new. Then select the following as the input of the image. Set Active and expired date as you like to trigger the event. and put some delay if you are using modem to connect your computer to the internet.

Image 9

Step 4: Then click on action tab and do the following. Browse the automail.exe on your desktop.

Image 10

Step 5: We are done here. You can check the task by right clicking on the task and then Run the task.

Image 11

Hope the project will help you.

Happy coding ...

History

  • 10th February, 2013: Initial version

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer Cefalo
Bangladesh Bangladesh
Hi,

I am Palash Debnath. I have been working on windows technologies since 2008. I started with ASP.NET. Then I moved to Windows Form and from the last year I have been working with Windows 8 app development. Work with Windows 10 apps development as well. Now I have been working with Microsoft Azure. I have completed my Undergraduate from Khulna University of Engineering in Computer Science & Engineering. Currently working as a Senior Software Engineer at Cefalo.

Comments and Discussions

 
Questionfound help full. Pin
Meer Wajeed Ali9-Jun-16 23:16
professionalMeer Wajeed Ali9-Jun-16 23:16 
QuestionQuestion Pin
Member 1047036321-Jan-14 7:30
Member 1047036321-Jan-14 7:30 
AnswerRe: Question Pin
dpalash21-Jan-14 21:08
professionaldpalash21-Jan-14 21:08 
You need to create a database, I have mentioned that, Please have a look at the images on the article and change the web.config file and point to your own database. Thanks
Question[My vote of 1] Storing password in plain text? A big no no! Pin
Chris Quinn7-May-13 5:07
Chris Quinn7-May-13 5:07 
AnswerRe: [My vote of 1] Storing password in plain text? A big no no! Pin
dpalash7-May-13 6:09
professionaldpalash7-May-13 6:09 
GeneralGood article Pin
Sampath Sridhar12-Mar-13 23:13
Sampath Sridhar12-Mar-13 23:13 
GeneralRe: Good article Pin
dpalash12-Mar-13 23:22
professionaldpalash12-Mar-13 23:22 
GeneralMy vote of 5 Pin
Ștefan-Mihai MOGA11-Mar-13 21:48
professionalȘtefan-Mihai MOGA11-Mar-13 21:48 
GeneralRe: My vote of 5 Pin
dpalash12-Mar-13 8:08
professionaldpalash12-Mar-13 8:08 
GeneralMy vote of 5 Pin
Razib Chandra Deb8-Mar-13 7:52
Razib Chandra Deb8-Mar-13 7:52 
GeneralRe: My vote of 5 Pin
dpalash8-Mar-13 7:53
professionaldpalash8-Mar-13 7:53 
GeneralMy vote of 5 Pin
Md. Selim Reza8-Mar-13 4:20
Md. Selim Reza8-Mar-13 4:20 
GeneralMy vote of 5 Pin
Md. Selim Reza8-Mar-13 4:14
Md. Selim Reza8-Mar-13 4:14 
GeneralRe: My vote of 5 Pin
dpalash8-Mar-13 7:53
professionaldpalash8-Mar-13 7:53 
GeneralMy vote of 5 Pin
Munir Hassan7-Mar-13 22:28
Munir Hassan7-Mar-13 22:28 
GeneralRe: My vote of 5 Pin
dpalash8-Mar-13 1:28
professionaldpalash8-Mar-13 1:28 
GeneralMy 5 Pin
Shahriar Iqbal Chowdhury/Galib21-Feb-13 1:58
professionalShahriar Iqbal Chowdhury/Galib21-Feb-13 1:58 
GeneralRe: My 5 Pin
dpalash21-Feb-13 22:35
professionaldpalash21-Feb-13 22:35 
GeneralMy vote of 5 Pin
ridoy18-Feb-13 21:00
professionalridoy18-Feb-13 21:00 
GeneralRe: My vote of 5 Pin
dpalash28-Feb-13 16:56
professionaldpalash28-Feb-13 16:56 
GeneralMy vote of 5 Pin
Bikash Karmokar17-Feb-13 6:24
Bikash Karmokar17-Feb-13 6:24 
GeneralRe: My vote of 5 Pin
dpalash17-Feb-13 6:26
professionaldpalash17-Feb-13 6:26 
GeneralMy vote of 5 Pin
Maksud Saifullah Pulak17-Feb-13 6:18
Maksud Saifullah Pulak17-Feb-13 6:18 
GeneralRe: My vote of 5 Pin
dpalash17-Feb-13 6:21
professionaldpalash17-Feb-13 6:21 
GeneralMy vote of 5 Pin
Member 1051082216-Feb-13 19:29
professionalMember 1051082216-Feb-13 19:29 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.