SMS(短讯服务中心)[四]-----winfrom

 有说到要做一个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:\SMS\LogFiles\";
        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
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值