您的位置:首页 > 编程语言 > ASP

ASP.NET 定时发送邮件 实现方法(包括确认邮件)

2011-02-23 18:11 791 查看
功能描述:

在指定时间(如上午9点)向订阅图书的邮箱发送订阅咨询。

细节:1.订阅条件,包括多种检索图书的条件,存放在XML表中

2.定时发送,时间存放在config文件中

3.订阅提交时首先有个确认邮件,里面包括确认链接。确认后,才将此订阅写入数据库中

4.数据库中在user表存放订阅标志(1为订阅0为取消订阅),订阅条件(处理好的条件语句,方便检索图书),订阅接收邮箱(默认为注册时邮箱),订阅关键词。

备注:初学C#,只是说说自己的解决方法。而且用GLOBAL文件写的定时器存在一个问题:当程序在一定时间内(IIS设置)没有运行,或者停止运行时,没有触发。我想,自己写个wf程序,用 windows计划任务实现定时器应该更加合理。

核心代码:

1.订阅条件下拉框填充

/// <summary>        /// 订阅关键词下拉选择框        /// </summary>        private void InitSearch()        {           foreach (DataRow dr in dsField.Tables["QUICK"].Rows)            {                sbOption.AppendFormat("<option value='{0}'>{1}</option>", dr["value"], dr["name"]);            }            ltlField.Text = sbOption.ToString();            sbOption = null;            dsField.Dispose();        }


2.定时发送代码

public class Global : System.Web.HttpApplication    {        protected void Application_Start(object sender, EventArgs e)        {            Application["VirtualPath"] = HttpContext.Current.Request.ApplicationPath;            //定时发送邮件            Timer t = new Timer(60000);//设计时间间隔,如果一个小时执行一次就改为3600000 ,这里一分钟调用一次          t.Elapsed += new ElapsedEventHandler(t_Elapsed);          t.AutoReset = true;          t.Enabled = true;        }                                 //定时发送邮件        private void t_Elapsed(object sender, ElapsedEventArgs e)        {            int sendTime_Hour = Convert.ToInt32(ConfigurationSettings.AppSettings["SendTime"].ToString());// 发送时间            int now_Hour = Convert.ToInt32(DateTime.Now.Hour.ToString());            int now_Minute = Convert.ToInt32(DateTime.Now.Minute.ToString());            int absolute = 1;//差距值,单位为分钟            if (((now_Hour == sendTime_Hour - 1) && (now_Minute >= 60 - absolute)) || ((now_Hour == sendTime_Hour) && (now_Minute <= absolute)))    //时间判断            {                try                {                    //定时发送邮件                    Mail.mailSend();                }                catch (Exception ex)                {                    throw new Exception(ex.Message);                }            }        }    }


3.邮件类,包括发送确认邮件

public  class Mail    {        public static  void mailSend()        {            string strHost = ConfigurationSettings.AppSettings["MailHost"].ToString(); //STMP服务器地址            string strAccount =  ConfigurationSettings.AppSettings["MailUsername"].ToString();       //SMTP服务帐号            string strPwd =ConfigurationSettings.AppSettings["MailPassword"].ToString();       //SMTP服务密码            string strFrom = ConfigurationSettings.AppSettings["MailFrom"].ToString();  //发送方邮件地址            string Subject = ConfigurationSettings.AppSettings["subJect"].ToString();//邮件主题            string to="";  //接收放邮件地址            string Condition = "";//订阅条件            string key = "";//订阅条件关键词            //获取订阅邮件地址            //1为订阅;0为未订阅            DataTable UserTo = new DataTable();            UserTo=SqlHelper.GetDataTable("select * from [User] where subScribe='1'");            if(UserTo.Rows.Count!=0)            {                foreach (DataRow dr in UserTo.Rows)                {                    key = dr["subSub"].ToString().Trim();                    Condition = dr["subWhere"].ToString().Trim();                    to = dr["subMail"].ToString().Trim();                    SmtpClient _smtpClient = new SmtpClient();                    _smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式                    _smtpClient.Host = strHost; ;//指定SMTP服务器                    _smtpClient.Credentials = new System.Net.NetworkCredential(strAccount, strPwd);//用户名和密码                                        MailMessage _mailMessage = new MailMessage(strFrom, to);                    _mailMessage.Subject = Subject;//主题                    _mailMessage.Body =getMailHtml(Condition,key);//内容                    _mailMessage.BodyEncoding = System.Text.Encoding.UTF8;//正文编码                    _mailMessage.IsBodyHtml = true;//设置为HTML格式                    _mailMessage.Priority = MailPriority.High;//优先级                    try                    {                        _smtpClient.Send(_mailMessage);                    }                    catch                    {                    }                }            }                                 }        /// <summary>        /// 赠送礼品        /// </summary>        /// <param name="RecMail">接收礼品地址</param>        /// <param name="Subject">主题</param>        /// <param name="MailBody">内容</param>        /// <param name="AttachMent">图书(附件)</param>        public  void mailSendGift(string RecMail,string Subject,string MailBody,string AttachMent)        {            string strHost = ConfigurationSettings.AppSettings["MailHost"].ToString(); //STMP服务器地址            string strAccount = ConfigurationSettings.AppSettings["MailUsername"].ToString();       //SMTP服务帐号            string strPwd = ConfigurationSettings.AppSettings["MailPassword"].ToString();       //SMTP服务密码            string strFrom = ConfigurationSettings.AppSettings["MailFrom"].ToString();  //发送方邮件地址                       string to = RecMail.ToString().Trim();  //接收放邮件地址            SmtpClient _smtpClient = new SmtpClient();            _smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式            _smtpClient.Host = strHost; ;//指定SMTP服务器            _smtpClient.Credentials = new System.Net.NetworkCredential(strAccount, strPwd);//用户名和密码            System.Net.Mail.Attachment objAttachMent = new System.Net.Mail.Attachment(AttachMent.ToString());            MailMessage _mailMessage = new MailMessage(strFrom, to);            _mailMessage.Subject = Subject;//主题            _mailMessage.Body = MailBody.ToString().Trim();//内容            _mailMessage.Attachments.Add(objAttachMent);//将附件附加到邮件消息对象中             _mailMessage.BodyEncoding = System.Text.Encoding.UTF8;//正文编码            _mailMessage.IsBodyHtml = true;//设置为HTML格式            _mailMessage.Priority = MailPriority.High;//优先级            try            {                _smtpClient.Send(_mailMessage);            }            catch            {            }        }         /// <summary>         /// 发送确认邮件         /// </summary>         /// <param name="subScribe">标志是否订阅1订阅0取消订阅</param>         /// <param name="subWhere">订阅条件SQL语句</param>         /// <param name="subMail">订阅接收地址</param>         /// <param name="subSub">订阅条件</param>        public void mailSendQuery(string subScribe, string subWhere, string subMail, string subSub, string UserName)        {            string strHost = ConfigurationSettings.AppSettings["MailHost"].ToString(); //STMP服务器地址            string strAccount = ConfigurationSettings.AppSettings["MailUsername"].ToString();       //SMTP服务帐号            string strPwd = ConfigurationSettings.AppSettings["MailPassword"].ToString();       //SMTP服务密码            string strFrom = ConfigurationSettings.AppSettings["MailFrom"].ToString();  //发送方邮件地址            string Subject = ConfigurationSettings.AppSettings["subJect"].ToString()+"—确认邮件";//邮件主题                        SmtpClient _smtpClient = new SmtpClient();            _smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式            _smtpClient.Host = strHost; ;//指定SMTP服务器            _smtpClient.Credentials = new System.Net.NetworkCredential(strAccount, strPwd);//用户名和密码            MailMessage _mailMessage = new MailMessage(strFrom, subMail);            _mailMessage.Subject = Subject;//主题            _mailMessage.Body = getMailHtmlQuery(subScribe, subWhere, subMail, subSub, UserName);//内容            _mailMessage.BodyEncoding = System.Text.Encoding.UTF8;//正文编码            _mailMessage.IsBodyHtml = true;//设置为HTML格式            _mailMessage.Priority = MailPriority.High;//优先级            try            {                _smtpClient.Send(_mailMessage);            }            catch            {            }        }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: