员工录入时间管理自动化邮件系统
带数据库备份的员工录入时间管理自动化邮件系统
引言
每个办公室都有自己的系统来维护员工的入职时间,以确保他们遵守办公时间。在我的情况下,我需要发送一封包含我的正式签名和时间的入职邮件。在工作中,我经常忘记给老板发入职邮件。所以可能会有一些困惑,不知道我今天是否按时到办公室。所以我决定创建一个应用程序来帮助我解决我的日常问题。今天,我将描述我解决这个问题的方法。
背景
我经常忘记及时发送我的入职邮件。因此,我决定开发一个应用程序来替我完成这项任务。对于程序员来说,开发一个应用程序比记住做一件事要容易得多。这就是为什么任务计划器的想法出现了。我还制作了一个安装程序,方便程序员使用,如果有人想在没有编程知识的情况下使用它。那么,我们开始吧。
Using the Code
最终,我部署了所有可能的方式来使其用户友好。我考虑到非程序员也可能使用这个应用程序。所以我是这样开发的。在我的第一部分,我将描述我在应用程序中使用的编程方法,在第二部分,我将描述如何使用我的应用程序。
第一部分
首先,我们需要了解我们正在开发的应用程序的场景。
如下所示
- 我们需要开发一个应用程序,它会在计算机启动时自动发送邮件。
- 我们需要从用户那里获取输入:收件人邮箱地址、网络凭据,当然还有用户自己的邮箱地址。
- 然后,我们可以添加一些签名或其他必要的信息,我们想随邮件发送。
- 然后,我们将发送邮件。
现在场景已经清楚了我们要做什么,我现在将详细阐述如何以及为什么这样做,并附带代码片段。
我们将从第二点开始,即“我们需要从用户那里获取输入:收件人邮箱地址、网络凭据,当然还有用户自己的邮箱地址。”
因此,可能会出现以下情况:
- 用户可能会输入错误的邮箱地址,所以我们需要验证邮箱地址是否符合标准格式。
- 在这里,我从用户那里获取姓名、邮箱、电话和职位作为输入。所以我也需要验证电话号码。此时,我只允许美国电话号码有效。如果您来自其他国家,请修改代码以验证您的电话号码。
这是邮箱验证的代码片段
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”,用于检查当天是否已发送邮件。
现在我们需要配置您的应用程序的邮件地址。
- 我们需要填写收件人邮箱地址和网络凭据。
- 收件人邮箱地址是发送邮件到特定地址所必需的。这是典型邮件协议中的“收件人”。之所以需要网络凭据,是因为我们需要发送邮件到各种不同的邮箱地址。因此,我们需要通过一个我能访问的邮箱地址进行发送。其格式如下:
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。然后邮件将连同必要的信息一起发送出去,信息将保存在数据库中,如果一切顺利,您将看到下面的窗口 " />
如果您想在计算机启动时发送邮件,请按照以下步骤操作:
步骤 1:我的电脑->右键单击->管理。
步骤 2:双击任务计划程序->右键单击任务计划程序库->创建任务。然后按照屏幕截图操作。
步骤 3:单击“触发器”选项卡->然后单击“新建”。然后选择图片中的输入内容。设置您希望触发事件的开始和结束日期。如果您使用调制解调器连接计算机到互联网,请设置一些延迟。
步骤 4:然后单击“操作”选项卡并执行以下操作。在桌面上浏览automail.exe。
步骤 5:我们在这里就完成了。您可以通过右键单击任务并运行任务来检查任务。
希望该项目对您有所帮助。
编码愉快...
历史
- 2013 年 2 月 10 日:初始版本