?有说到要做一个winfrom的程式来自动排程发送预约成功的短讯。
?
结构如下图:

?
其中Form1窗体的界面如下:

主要是调用web references也就是前面写到的同一发送。webservice.
具体的实现当然是用一个Timer去隔时间的检测预约时间是否到达,到达了就调用webservice发送短讯。当然有一些记录log的mail提示的,就都包含在了Module.cs中。下面主要看看该类代码如下:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.IO;
using System.Net.Mail;
namespace Auto
{
public class Module
{
}
#region DBUtility
public static class DBUtility
{
private static SqlConnection scn = new SqlConnection("Data Source=10.1.1.128;Initial Catalog=SMS;Persist Security Info=True;User ID=smsuser;Password=smsuser");
public static DataTable GetDataTableBySql(string SqlCommnad)
{
if (DBUtility.scn.State != ConnectionState.Open)
scn.Open();
SqlCommand cmd = new SqlCommand(SqlCommnad,scn);
DataSet ds = new DataSet();
SqlDataAdapter ada = new SqlDataAdapter(cmd);
ada.Fill(ds);
DataTable dt = ds.Tables[0];
if (DBUtility.scn.State == ConnectionState.Open)
scn.Close();
return dt;
}
public static Int32 ExecuteNonQuery(string SqlCommnad)
{
if (DBUtility.scn.State != ConnectionState.Open)
scn.Open();
SqlCommand cmd = new SqlCommand(SqlCommnad,scn);
Int32 affectedRow = cmd.ExecuteNonQuery();
if (DBUtility.scn.State == ConnectionState.Open)
scn.Close();
return affectedRow;
}
}
#endregion
#region LogUtility
/// <summary>
/// Record any log in specific path
/// </summary>
public class LogUtility
{
string strLogPath =@"C:SMSLogFiles";
private static LogUtility LogUtilityInstance = null;
private static object UtilityLock = typeof(LogUtility);
private LogUtility() { }
public static LogUtility GetInstance()
{
lock (UtilityLock)
{
if (LogUtilityInstance == null)
LogUtilityInstance = new LogUtility();
return LogUtilityInstance;
}
}
/// <summary>
/// Write error log to specific path
/// </summary>
/// <param name="LogHeader">the message that u want to add before exception message</param>
/// <param name="ex">Exception</param>
public void HandleExceptionLog(string LogHeader,Exception ex)
{
System.Text.StringBuilder sbLogHeader = new System.Text.StringBuilder(128);
System.Text.StringBuilder sbLogMessage = new System.Text.StringBuilder();
sbLogHeader.Append(strLogPath);
sbLogHeader.Append(System.DateTime.Now.ToString("yyyy.MM.dd-HH"));
sbLogHeader.Append(".log");
try
{
sbLogMessage.Append("→");
sbLogMessage.Append(System.DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss") + "-");
sbLogMessage.Append(LogHeader);
sbLogMessage.Append("↓" + Environment.NewLine);
if (ex != null)
{
sbLogMessage.Append(ex.Message + "↓" + Environment.NewLine);
sbLogMessage.Append(ex.StackTrace + "←" + Environment.NewLine);
FileUtility.GetInstance().AppendTextToFile(sbLogHeader.ToString(),sbLogMessage.ToString());
}
}
catch
{
}
finally
{
sbLogHeader = null;
sbLogMessage = null;
}
}
public void HandleExceptionLog(string LogHeader,string msg)
{
System.Text.StringBuilder sbLogHeader = new System.Text.StringBuilder(128);
System.Text.StringBuilder sbLogMessage = new System.Text.StringBuilder();
sbLogHeader.Append(strLogPath);
sbLogHeader.Append(System.DateTime.Now.ToString("yyyy.MM.dd-HH"));
sbLogHeader.Append(".log");
try
{
sbLogMessage.Append("→");
sbLogMessage.Append(System.DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss") + "-");
sbLogMessage.Append(LogHeader);
sbLogMessage.Append("↓" + Environment.NewLine);
if (msg != null)
{
sbLogMessage.Append(msg + "←" + Environment.NewLine);
FileUtility.GetInstance().AppendTextToFile(sbLogHeader.ToString(),sbLogMessage.ToString());
}
}
catch
{
}
finally
{
sbLogHeader = null;
sbLogMessage = null;
}
}
}
#endregion
#region FileUtility
public class FileUtility
{
private static FileUtility FileUtilityInstance = null;
private static object UtilityLock = typeof(FileUtility);
private FileUtility() { }
public static FileUtility GetInstance()
{
lock (UtilityLock)
{
if (FileUtilityInstance == null)
FileUtilityInstance = new FileUtility();
return FileUtilityInstance;
}
}
public void AppendTextToFile(string fileName,string LogText)
{
System.Threading.Monitor.Enter(this);
StreamWriter LogFileStream;
if (this.MakeDirectory(fileName))
{
try
{
if (File.Exists(fileName))
{
LogFileStream = File.AppendText(fileName);
}
else
{
LogFileStream = File.CreateText(fileName);
}
if (LogFileStream != null)
{
LogFileStream.Write(LogText);
LogFileStream.Flush();
LogFileStream.Close();
}
}
catch
{
}
finally
{
LogFileStream = null;
System.Threading.Monitor.Exit(this);
}
}
}
private bool MakeDirectory(string FolderPath)
{
bool IsOK = false;
System.Text.StringBuilder sbFilePath = new System.Text.StringBuilder(128);
char seperator = '';
string[] FolderSplit = FolderPath.Split(seperator);
try
{
for (int cnt = 0; cnt < FolderSplit.Length - 2; cnt++)
{
sbFilePath.Append(FolderSplit[cnt] + "");
if (!Directory.Exists(sbFilePath.ToString()))
{
Directory.CreateDirectory(sbFilePath.ToString());
}
}
IsOK = true;
}
catch
{
IsOK = false;
}
finally
{
FolderSplit = null;
sbFilePath = null;
}
return IsOK;
}
}
#endregion
#region MailUtility
/// <summary>
/// 寄送mail
/// </summary>
/// <param name="strMailTo">收件者</param>
/// <param name="strSubject">主旨</param>
/// <param name="strbody">內容</param>
/// <param name="strMailForm">寄件者</param>
/// <param name="cc"></param>
/// <returns></returns>
public static class MailUtility
{
public static bool sendEMail(string strMailTo,string strSubject,string strbody,string strMailForm,string cc)
{
try
{
MailMessage message = new MailMessage();
message.Body = strbody;
//寄件者
if (strMailForm.Trim() == "")
{
MailAddress ma = new MailAddress("service@adgroup.com.tw");
message.From = ma;
message.Subject = strSubject;
}
else
{
MailAddress ma = new MailAddress(strMailForm);
message.From = ma;
message.Subject = strSubject;
}
if (cc != "")
{
message.CC.Add(cc);
}
//收件者
message.To.Add(strMailTo);
//mailserver
SmtpClient sc = new SmtpClient("TWEXCAS02.adgroup.com.tw");
//System.Net.NetworkCredential nc = new System.Net.NetworkCredential("systemlead","123456","DOMAIN");
//sc.Credentials = nc;
sc.Send(message);
LogUtility.GetInstance().HandleExceptionLog("mail",strMailTo);
return true;
}
catch (Exception ex)
{
LogUtility.GetInstance().HandleExceptionLog("mail",ex);
return false;
throw;
}
}
}
#endregion
}