国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

淺談Asp.net實現的郵件發送引擎

2019-11-17 04:08:26
字體:
來源:轉載
供稿:網友
貴站是一個非常不錯的網站,內容豐富,讓我學到了很多東西,為了表示對貴站的支持,特提供我自己寫的一篇拙作,盼請審核收錄.
標題:淺談asp.net實現的郵件發送引擎
內容:
用asp.net發送Email已經不是一件新鮮的事情了.可以采用很多種方法來發送,比如SmtpMail方法,Socket方法,通過第三方組件jmail等方式都可以.但是本文討論的不是發送郵件采用的技術,而是通過公司的一個項目()實踐說說郵件引擎的架構,有不足和改進之處,歡迎同行批評指正.
我們以前發送郵件的時候采用的方法就是,在頁面里面觸發進行發送,比如注冊了會員,點了提交按鈕之后,將會員數據插入到數據庫,然后進行發送.這種方法雖然簡單方便,但是有一個弱點,如果郵件發送失敗,就不能重發了.因此,在我們項目中采用的方法是,將需要發送的郵件統一插入到一個郵件隊列,然后由引擎來處理這個隊列.具體的做法是,數據庫設計:
Win_EmailQueue(郵件隊列表)
QueueId    int   自動編號,主鍵Id
ToEmail    nvarchar(100)  收件人
Title      nvarchar(100)  郵件標題
Content    ntext          郵件內容
AddDate    datetime       添加時間
TryTimes   int            錯誤重試次數
LastSendTime datetime     最后一次發送的時間
Status     int            狀態:0 未發送 1 已經發送
需要發送郵件的時候,如注冊會員成功后,將郵件的內容插入到表中.
郵件引擎可以用一個系統服務來完成,安裝在Web服務器同一臺服務器上面,也可以根據負載實際情況安裝在另外一臺服務器上面,減輕Web服務器負擔.郵件引擎的任務是間隔一個時間(比如5秒),查詢郵件隊列,根據時間順序發送郵件,為了降低引擎的負擔,可以設置每次發送15封,當然這個數字要根據實際情況來配置.
以下是處理隊列和發送郵件的一些代碼.
 ///
        /// 發送Email隊列,來自 
        ///
        public static void SendEmailQueue()
        {
            //取最新的15條未成功的進行發送。
            string sql = "select top 15 * from Win_EmailQueue where Status=0 and ToEmail<>'' order by AddDate desc";
            DataTable dt = DbHelperSQL.Query(sql).Tables[0];
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                string title = dt.Rows[i]["Title"].ToString();
                string content = dt.Rows[i]["Content"].ToString();
                string to = dt.Rows[i]["ToEmail"].ToString();
                string CreateTime = dt.Rows[i]["AddDate"].ToString();
                string QueueID = dt.Rows[i]["QueueID"].ToString();
                bool flag = EmailUtil.Send(title, to, content);
                if (flag)
                {
      //發送成功,將Status設置為1
                    sql = "update  Win_EmailQueue set Status=1 where QueueID=" + QueueID + "";
                }
                else
                {
      //發送失敗,將失敗次數增加1
                    sql = "update   Win_EmailQueue set TryTimes=TryTimes+1,LastSendTime='" + DateTime.Now.ToString() + "' where QueueID=" + QueueID + "";
                }
                DbHelperSQL.ExecuteSql(sql);
            }
            dt.Dispose();
            //超過10次未成功的郵件,將不再發送
            sql = "update  Win_EmailQueue set Status=1  where TryTimes>10";
            DbHelperSQL.ExecuteSql(sql);
        }
 ///
        /// 執行發送操作,來自 
        ///
        ///
        public static bool Send(string title, string to, string content)
        {
            //來自配置項
            string fromemail = System.Configuration.ConfigurationManager.AppSettings["SMTPUserName"];
            string smtpserver = System.Configuration.ConfigurationManager.AppSettings["SMTPServer"];
            string frompwd = System.Configuration.ConfigurationManager.AppSettings["SMTPPass"];
            string fromaddress = System.Configuration.ConfigurationManager.AppSettings["SMTPNickName"];
            MailMessage mail = new MailMessage();
            mail.From = new MailAddress(fromemail, fromaddress, Encoding.GetEncoding("gb2312"));//發件人的郵箱
            mail.To.Add(new MailAddress(to));//收件人
            mail.Subject = title;//主題
            mail.Body = content;//內容
            mail.IsBodyHtml = true;
            mail.SubjectEncoding = Encoding.GetEncoding("gb2312");
            mail.BodyEncoding = Encoding.GetEncoding("gb2312");
            mail.IsBodyHtml = true;
            mail.PRiority = MailPriority.Normal;
            SmtpClient sc = new SmtpClient(smtpserver);//發郵件的服務器
            NetworkCredential nc = new NetworkCredential(fromemail, frompwd);//申請的帳戶信息
            sc.Credentials = nc;
            bool successflag;
            try
            {
                sc.Send(mail);
                successflag = true;
            }
            catch
            {
                successflag = false;
            }
            return successflag;
        }
在虛擬主機中,也可以采用首頁加載一個script頁面,這個頁面來充當郵件引擎.代碼如下:
Ajax/ajaxm.aspx
protected void Page_Load(object sender, EventArgs e)
{
    try
    {
 Email.SendEmailQueue();  //發送郵件
    }
    catch (Exception ex)
    {
 Log.SaveException(ex);  //保存錯誤日志
    }
    Response.Write(" ");
    Response.End();
}
然后在首頁或者內頁,插入代碼及可.
歡迎各位轉載文章,同行批評和指正,但是請保留作者信息.
作者:漫步甜蜜
主頁:http://www.shouji138.com (手機主題)
QQ:441003232
郵箱:haolinks@163.com
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巴马| 子洲县| 大庆市| 永新县| 东至县| 林西县| 泗阳县| 哈密市| 定远县| 汕尾市| 藁城市| 敖汉旗| 古交市| 镇雄县| 商河县| 大石桥市| 喀喇沁旗| 大同县| 团风县| 隆安县| 隆化县| 乐至县| 寻乌县| 定兴县| 利川市| 曲靖市| 湟源县| 张家港市| 漳州市| 安仁县| 六盘水市| 子洲县| 张家界市| 瓮安县| 郑州市| 中阳县| 盐津县| 榆中县| 道真| 舒城县| 巴青县|