65.9K
CodeProject 正在变化。 阅读更多。
Home

员工录入时间管理自动化邮件系统

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.87/5 (26投票s)

2013年2月7日

CPOL

8分钟阅读

viewsIcon

65826

downloadIcon

1920

带数据库备份的员工录入时间管理自动化邮件系统

引言

每个办公室都有自己的系统来维护员工的入职时间,以确保他们遵守办公时间。在我的情况下,我需要发送一封包含我的正式签名和时间的入职邮件。在工作中,我经常忘记给老板发入职邮件。所以可能会有一些困惑,不知道我今天是否按时到办公室。所以我决定创建一个应用程序来帮助我解决我的日常问题。今天,我将描述我解决这个问题的方法。

背景

我经常忘记及时发送我的入职邮件。因此,我决定开发一个应用程序来替我完成这项任务。对于程序员来说,开发一个应用程序比记住做一件事要容易得多。这就是为什么任务计划器的想法出现了。我还制作了一个安装程序,方便程序员使用,如果有人想在没有编程知识的情况下使用它。那么,我们开始吧。

Using the Code

最终,我部署了所有可能的方式来使其用户友好。我考虑到非程序员也可能使用这个应用程序。所以我是这样开发的。在我的第一部分,我将描述我在应用程序中使用的编程方法,在第二部分,我将描述如何使用我的应用程序。

第一部分

首先,我们需要了解我们正在开发的应用程序的场景。

如下所示

  1. 我们需要开发一个应用程序,它会在计算机启动时自动发送邮件。
  2. 我们需要从用户那里获取输入:收件人邮箱地址、网络凭据,当然还有用户自己的邮箱地址。
  3. 然后,我们可以添加一些签名或其他必要的信息,我们想随邮件发送。
  4. 然后,我们将发送邮件。

现在场景已经清楚了我们要做什么,我现在将详细阐述如何以及为什么这样做,并附带代码片段。

我们将从第二点开始,即“我们需要从用户那里获取输入:收件人邮箱地址、网络凭据,当然还有用户自己的邮箱地址。”

因此,可能会出现以下情况:

  • 用户可能会输入错误的邮箱地址,所以我们需要验证邮箱地址是否符合标准格式。
  • 在这里,我从用户那里获取姓名、邮箱、电话和职位作为输入。所以我也需要验证电话号码。此时,我只允许美国电话号码有效。如果您来自其他国家,请修改代码以验证您的电话号码。

这是邮箱验证的代码片段

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

这是电话号码验证的代码

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;
        }
  }
}

如果您查看上面的代码,您会发现我已经注释掉了孟加拉国电话号码的模式。如果您需要分配其他国家的电话号码,请为您自己的电话号码添加一个正则表达式。这会起作用,或者如果这导致任何问题,您可以简单地修改您D盘上的文本文件,并将您需要的信息放在那里(但不要超过4段,并且您还必须保持代码的格式,即姓名、邮箱、电话和职位)。除了邮箱地址,您将能够更改所有内容,您需要将邮箱地址保留在第2段以正确执行任务。

因此,我们在验证了以上所有标准后,就从用户那里获取了输入。现在我们需要保存文件。我已将文件保存为“info.txt”,位于您计算机的D:驱动器上。当您运行此项目时,它将创建两个文件。

第一个文件名为“info.txt”,用于保存用户信息,第二个文件名为“date.txt”,用于检查当天是否已发送邮件。

现在我们需要配置您的应用程序的邮件地址。

  1. 我们需要填写收件人邮箱地址和网络凭据。
  2. 收件人邮箱地址是发送邮件到特定地址所必需的。这是典型邮件协议中的“收件人”。之所以需要网络凭据,是因为我们需要发送邮件到各种不同的邮箱地址。因此,我们需要通过一个我能访问的邮箱地址进行发送。其格式如下:
 var cred = new NetworkCredential(_credentialMail, _credentialPassword);
 var mailClient = new SmtpClient("smtp.gmail.com", 587);  

这意味着我们使用gmail作为SMTP客户端,而您将在_credentialMail_credentialPassword中提供网络凭据。

例如:假设我们有3个邮箱地址如下:

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

现在假设我们要从<x@x.com><y@y.com>发送电子邮件。那么我们需要像下面这样填写才能在这个例子中起作用:

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

我们将此信息保存在D:驱动器上的一个名为CredentialInfo.txt的文本文件中。这里,您需要知道的是,我只配置了gmail的凭据。所以网络凭据邮箱地址必须是gmail邮箱

这是用于创建文件的函数

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;
}

我们已经完成了应用程序的设置!!太棒了。现在我们需要发送邮件。这是发送邮件的代码块。

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");
 }  

您可以看到我们正在从文本文件中读取网络凭据信息。所以我们需要在文本文件中放入有效信息才能使其正常工作。

我还将信息保存在了数据库中。这是用于此目的的函数。

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);
   }
}

这是数据库表设计

第二部分

请按照以下步骤配置应用程序。

步骤 1:运行项目。

步骤 2:设置->注册->填写文本框中的信息。这是一个例子。

这里有一些您需要注意的验证。请按照美国电话格式输入电话号码。例如 XXX-XXX-XXXX。

另外,您还需要注意邮箱地址的格式

当您正确输入信息后,就会出现注册成功窗口。

步骤 3设置->配置邮件地址->填写文本框中的信息。这是一个例子。

步骤 4:转到您计算机的D盘,并将日期更改为前一天,替换当前日期。

步骤 5:按下发送邮件按钮。邮件将发送到您在邮件地址中输入的地址。您会在驱动器上找到一个下载的标志。您也可以制作自己的标志或公司标志。要做到这一点,您需要在此处放置链接。

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);
  }
}

更改 dropbox 的链接并放置您自己的链接,然后将文件名放在我使用的地方

@"D:\desme_logo.gif" 

我还创建了一个安装项目。如果您下载了该项目,您将找到一切。

如果您想在计算机启动时发送邮件,则需要执行以下操作:

步骤 1:转到项目文件夹->打开program.cs->将Application.Run(new Home());替换为Application.Run(new auto_mail());

注意:有两个独立的项目。它们都在工作。您需要通过将Application.Run(new auto_mail());替换为Application.Run(new Home());或将Application.Run(new Home());替换为Application.Run(new auto_mail());来区分这两个项目。要发送自动邮件,请执行最后一个,因为默认情况下,我已编码第一个。

步骤 2:构建项目->然后重新构建安装项目(automail)。

步骤 3。右键单击安装项目->选择安装->完成安装。

步骤 4:转到您的桌面->您会看到automail.exe,运行该 EXE。

步骤 5:如果提示您未注册,请按照我之前提到的步骤进行注册。

步骤 6:关闭窗口->像之前一样更改date.txt文件的日期,并将其设置为今天的日期之前的日期->保存文件。

步骤 7:再次运行automail.exe。然后邮件将连同必要的信息一起发送出去,信息将保存在数据库中,如果一切顺利,您将看到下面的窗口 笑脸 | <img src= " />

如果您想在计算机启动时发送邮件,请按照以下步骤操作:

步骤 1:我的电脑->右键单击->管理。

步骤 2:双击任务计划程序->右键单击任务计划程序库->创建任务。然后按照屏幕截图操作。

步骤 3:单击“触发器”选项卡->然后单击“新建”。然后选择图片中的输入内容。设置您希望触发事件的开始结束日期。如果您使用调制解调器连接计算机到互联网,请设置一些延迟。

步骤 4:然后单击“操作”选项卡并执行以下操作。在桌面上浏览automail.exe

步骤 5:我们在这里就完成了。您可以通过右键单击任务并运行任务来检查任务。

希望该项目对您有所帮助。

编码愉快...

历史

  • 2013 年 2 月 10 日:初始版本
© . All rights reserved.