耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)

先提一下:针对第一篇文章,有人拍砖,值得欣慰.

原文地址:http://www.cnblogs.com/liulun/archive/2008/08/17/1269675.html

砖文地址:http://www.cnblogs.com/xiaotie/archive/2008/08/17/1269902.html

作者:兽族的荣耀

再次感谢作者

只说一句:我的目的是为了让人们熟悉一下思路知道这个系统该怎么入手,怎么做,能写出个方案来.重点不在面向对象,设计模式上

 

 

好先看代码(自认为注释的还算详细)

一:一些客户端的东西

第一个js片段

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)Code
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        function CallServerAjax_lei()
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
//这是用div设计的模态对话筐,用于提示中间过程信息 
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
           mask.style.visibility='visible';
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)           massage_box.style.visibility
='visible'
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
//获取要发送的邮件的id和客户分类的id(我要把一封邮件发送给一类人)  
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
           var youjian_id = document.getElementById("<%=emailId.ClientID %>").value;           
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)           var class_id 
= document.getElementById("<%=DropDownList1.ClientID %>").value;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
//做个初步验证   
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
            if(class_id.length <= 0)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)               alert(
'请选择分类');
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)               
return false;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
//只能传一个参数,我就暂且组合了字符串,在到服务器端拆分了
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
            var post_str = class_id + "#" +youjian_id;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
//定时调用,只为了实时的显示状态信息
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
           window.setInterval(function()
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)              
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){ prepareCallServer(post_str);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)              }
,6000);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        }

注意上面程序里 最后一句有个prepareCallServer函数,将在下面程序中给出

 

第二个js片段 

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)Code
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        function prepareCallServer(arg)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)           
//这是提示信息的div
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
           var context = document.getElementById("<%=ajax_return.ClientID %>");
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)           CallServer(arg,context);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        function CallServer(arg,context)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
//一个普通的ajax回调,具体就不解释了
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
           <%= ClientScript.GetCallbackEventReference(this"arg""ReceiveServerData""context""FalseReceiveServerData" , true)%>;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
//回调成功后的客户端函数
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
         function ReceiveServerData(result, context) 
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)             
//设置实时的信息
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
             context.innerHTML = result;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)         }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)         
//回调失败后的客户端函数
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
         function FalseReceiveServerData() 
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)             var context 
= document.getElementById("<%=ajax_return.ClientID %>");
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)             context.innerHTML 
= "<IMG alt='请等待' src='load_img/loader.gif' align='center'><br>连接超时";
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)         }

 我这里写那个prepareCallServer函数貌似多余,

当时写的时候好象别有用心

现在回忆起来也惘然了.汗自己一个

 

二:服务器端的一些东西

先说pageload

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)Code
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)if (!IsPostBack)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                
//每次加载页面先把线程的开始与否的标志变量重置一下
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
                Session["SendThreadClass"= null;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                
//开始判断“待发邮件数据表”里有无记录
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
                edm_temp tempBll = new edm_temp();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                
//这里我写的不好,最好不要返回一个list,返回一个bool最好了(具体的不细说)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
                IList<edm_temp_info> temps = tempBll.GetTemp(admin_id, domain_id);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                
if (temps.Count >= 1)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                    ajax_return.Text 
= "<IMG alt='请等待' src='load_img/loader.gif' align='center'><br>开始发送上次尚未完成的邮件";
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                    
//确定要发哪封邮件
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
                    emailId.SelectedValue = temps[0].email_id.ToString();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                    
//注册客户端事件,注意这里调用的是CallServerAjax_FalseResend();我客户端当然写了这个js方法,只是没在次文章中公布而已
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
                    Page.ClientScript.RegisterStartupScript(this.GetType(), """<script>CallServerAjax_FalseResend();</script>");
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            }

如果有没有发送成功的邮件,那我就直接给他发这些邮件

 

在看ICallbackEventHandler这个接口的实现

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)Code
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        public void RaiseCallbackEvent(string eventArgument)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
if (Session["SendThreadClass"== null)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                
//初始化邮件发送实体,将在下面一段代码中提到
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
                SendThreadClass sendobj = new SendThreadClass();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                sendobj.admin_id 
= ((edm_admin_info)Session["logined"]).Id;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                sendobj.domain_id 
= Convert.ToInt32(Session["domain_id"]);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                
//客户端传过来的字符串现在开始拆了
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
                string[] flag_str = eventArgument.Split('#');
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                sendobj.arg_str 
= flag_str[0];
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                sendobj.youjian_id 
= Convert.ToInt32(flag_str[1]);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                
//以上这些就是线程函数的参数了
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                Thread sendmail_thread;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)              sendmail_thread 
= new Thread(new ThreadStart(sendobj.sendmail_lei));
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                
//设置为前台线程,即使主方法执行结束了我的线程仍在执行
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
                sendmail_thread.IsBackground = false;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                sendobj.thread_flag 
= false;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                sendmail_thread.Start();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                
//线程的标志变量
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
                Session["SendThreadClass"= sendobj;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
public string GetCallbackResult()
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
//获取实时信息
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
            int admin_id = ((edm_admin_info)Session["logined"]).Id;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
int domain_id = Convert.ToInt32(Session["domain_id"]);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            edm_ajax ajaxBll 
= new edm_ajax();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
return ajaxBll.GetAjax(admin_id, domain_id);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        }
      
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)    }

线程的标志变量可以用bool类型的变量取代,这里我写的不好

 

三:最后是线程相关的类

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)Code
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)    public class SendThreadClass
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)    
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
public string arg_str;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
public int admin_id;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
public int domain_id;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
public int youjian_id;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
public bool thread_flag;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
public void sendmail_lei()
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
int class_id = int.Parse(arg_str);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            edm_send_mail sendmailBll 
= new edm_send_mail();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            sendmailBll.SendMail_Lei(class_id, youjian_id,
true, admin_id, domain_id);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            thread_flag 
= true;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)    }

这里也没写什么属性,

直接把变量public了,

 

附件1:邮件发送逻辑层主要方法

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)Code
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)public bool SendMail_Lei(int class_id, int email_id, bool flag, int admin_id, int domain_id)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
bool customer_flag = false;//客户姓名标签替换哨兵变量
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
            bool trace_flag = false;//追踪字符串哨兵变量
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
            string mail_content = ""//邮件正文
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
//先把所有的待发邮件客户插入到临时数据库中,返回客户总数。
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
            edm_temp tempBll = new edm_temp();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
int total_num = tempBll.InsertTempByClass(class_id, email_id, Convert.ToInt32(flag), admin_id, domain_id);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
return true;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
//把开始时间客户总数等信息存入临时AJAX数据表中,以备定时调用。
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
            edm_ajax ajaxBll = new edm_ajax();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            ajaxBll.DeleteAjax(admin_id, domain_id);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
int ajax_id = ajaxBll.InsertAjax(total_num, DateTime.Now, admin_id, domain_id);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
//然后在从临时数据库中取出客户信息,为了安全(高并发等等),牺牲性能!
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
            IList<edm_temp_info> temps = tempBll.GetTemp(admin_id, domain_id);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
//得到此域的SMTP信息
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
            edm_smtp smtpBll = new edm_smtp();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            edm_smtp_info smtp 
= smtpBll.SelectSmtp(domain_id);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
//得到mail信息
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
            edm_mail mailBll = new edm_mail();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            edm_email_info email 
= mailBll.SelectSingleEmail(email_id);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
//初始化mail组件
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
            Mails mymail = new Mails();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            mymail.From 
= smtp.User_Name;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            mymail.FromName 
= smtp.From_Name;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            mymail.PassWord 
= smtp.Pass_Word;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            mymail.UserName 
= smtp.User_Name;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            mymail.SmtpHost 
= smtp.Smtp;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            mymail.ToName 
= smtp.To_Name;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            mymail.Title 
= email.Title;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
if (flag)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                mail_content 
= email.Contents + "<img src='http://www.thinkedm.com/trace.aspx?A=^trace_id^' width='0' height='0' style='display:none'>";
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                trace_flag 
= true;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
else
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                mail_content 
= email.Contents;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            customer_flag 
= mail_content.Contains("^customer_name^");
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            mymail.Content 
= mail_content;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            mymail.Files 
= email.Files;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
//初始化邮件发送状态
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
            edm_action_info action = new edm_action_info();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            action.Admin_Id 
= admin_id;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            action.Domain_Id 
= domain_id;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            action.Mail_Id 
= email.Id;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            edm_customer customerBll 
= new edm_customer();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            edm_action actionBll 
= new edm_action();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            action.Sort_Id 
= actionBll.SelectSort(domain_id)+1;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
foreach (edm_temp_info temp in temps)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                
if (temp.false_num >= 3)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                    tempBll.DeleteTemp(temp.id); 
//如果失败了3次了!那就不客气的把这个邮件做掉
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
                    ajaxBll.UpdateSuccessAjax(ajax_id); //客户也只有暂时让他蒙在鼓里了
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
                }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                
else
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                    edm_customer_info customer 
= customerBll.selectSingleCustomer(temp.customer_id);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                    mymail.MailAddress 
= customer.E_Mail;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                    action.Customer_Id 
= customer.Id;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                    
int trace_id = actionBll.SendAction(action);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                    
if (trace_flag) //加入追踪id
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
                    耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){ mymail.Content = mymail.Content.Replace("^trace_id^", trace_id.ToString()); }
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                    
if (customer_flag) //加入客户姓名
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
                    耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){ mymail.Content = mymail.Content.Replace("^customer_name^", customer.User_Name); }
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                    
if (mymail.sendMail())//开始发邮件
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
                    耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                        tempBll.DeleteTemp(temp.id);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                        actionBll.SetSuccessFlag(
1, trace_id);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                        ajaxBll.UpdateSuccessAjax(ajax_id);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                    }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                    
else
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                    
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                        tempBll.UpdateTemp(temp.id);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                        actionBll.SetSuccessFlag(
0, trace_id);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                        ajaxBll.UpdateFalseAjax(ajax_id);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                    }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                    
if (customer_flag || trace_flag)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                    
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                        mymail.Content 
= mail_content;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                    }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                    System.Threading.Thread.Sleep(
6000);//发一封邮件休息3秒钟
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
                }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
return true;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        }

这里有一个技巧:邮件追踪(可以得到用户在什么时间什么地点看了这个邮件)

另:发一封邮件停6秒是经验  如果是自己的SMTP服务器  估计这个时间可以短一些

 

附件2:返回中间过程信息的方法

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)Code
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
public string GetAjax(int admin_id, int domain_id)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
string load_img = "<IMG alt='请等待' src='load_img/loader.gif' align='center'><br>";
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
string return_str = load_img + "初始化设置开始";
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
float percent = 0;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            edm_ajax_info ajax 
= dal.GetAjax(admin_id, domain_id);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            edm_temp tempBll 
= new edm_temp();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            IList
<edm_temp_info> temps = tempBll.GetTemp(admin_id, domain_id);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
if (temps.Count <= 0)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){                
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                return_str 
= "邮件发送完成<br>" +
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                             
"共耗时:" + (DateTime.Now - ajax.start_time).TotalMinutes + "分<br>" ;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                
if (ajax.false_num > 0)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){ return_str = return_str + "尚有" + ajax.false_num + "封邮件未发送成功<br><a href='send_history.aspx?del_false=true' style='color:#036'>放弃失败邮件查看历史记录</a>|<span onclick='return CallServerAjax_FalseResend();' style='color:#036;cursor:hand;'>继续发送失败邮件</span>"; }
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                
else
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){ return_str = return_str + "邮件全部发送成功<br><a href='send_history.aspx' style='color:#036'>查看历史记录</a>"; }
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                DeleteAjax(ajax.id);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                
return return_str;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
if (ajax.total_num != 0)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                percent 
= (ajax.false_num + ajax.success_num) * 100 / ajax.total_num;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                return_str 
= load_img + "邮件总数:" + ajax.total_num.ToString();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                return_str 
= return_str + "<br>开始时间:" + ajax.start_time.ToLongTimeString();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                return_str 
= return_str + "<br>成功数量:" + ajax.success_num.ToString();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                return_str 
= return_str + "<br>失败数量:" + ajax.false_num.ToString();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                return_str 
= return_str + "<br>剩余数量:" + temps.Count.ToString();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                return_str 
= return_str + "<br>发送进度:" + percent.ToString() + "%";
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
return return_str;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        }

 

 

附件3:邮件发送核心类

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)Code
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)using System;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
using System.Collections.Generic;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
using System.Text;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
using System.Net;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
using System.Web;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
using System.Net.Mail;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
namespace FirGo.File
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)    
public class Mails
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)    
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
private string from;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
private string fromName;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
private string userName;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
private string passWord;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
private string smtpHost;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
private string title;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
private string content;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
private string mailaddress;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
private string toname;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
private string files;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
public string From
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
set 耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){ from = value; }
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
public string FromName
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
set 耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){ fromName = value; }
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
public string UserName
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
set 耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){ userName = value; }
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
public string PassWord
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
set 耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){ passWord = value; }
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
public string SmtpHost
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
set 耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){ smtpHost = value; }
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
public string Title
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
set 耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){ title = value; }
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
public string Content
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
set 耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){ content = value; }
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
get 耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)return content;}
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
public string MailAddress
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
set 耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){ mailaddress = value; }
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
public string ToName
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
set 耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){ toname = value; }
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
public string Files
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
set 耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){ files = value; }
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
public Mails()
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
//暂时不用asp.net组件发邮件,因为有的邮箱不太喜欢这个
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
        public bool sendMail()
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            MailMessage messages 
= new MailMessage();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            messages.From 
= new MailAddress(from, fromName);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            messages.To.Add(
new MailAddress(mailaddress));
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            messages.Subject 
= title;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            messages.SubjectEncoding 
= System.Text.Encoding.Default;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            messages.Body 
= content;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            messages.BodyEncoding 
= System.Text.Encoding.Default;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            messages.IsBodyHtml 
= true;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            messages.Priority 
= MailPriority.High;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
//不能使用这个try块,想要有附件的时候没有附件问题就大了
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
//try   
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
//{
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
            if (!string.IsNullOrEmpty(files))
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续){
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                Attachment fujian 
= new Attachment(files);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)                messages.Attachments.Add(fujian);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
//}
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
//catch
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
//{ }
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            SmtpClient client 
= new SmtpClient(smtpHost);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            NetworkCredential smtpuserinfo 
= new NetworkCredential();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            smtpuserinfo.UserName 
= userName;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            smtpuserinfo.Password 
= passWord;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            client.Credentials 
= smtpuserinfo;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            client.Timeout 
= 36000000;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
//try
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
//{
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
                client.Send(messages);
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
//}
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
//catch
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
//{ return false; }
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)
            messages.Dispose();
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)            
return true;
耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)        }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)    }

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)}

耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案(续)

 

写到这里代码还是不全,

不过到此为止吧,如果尚有不明白的地方,

请在下面留言提问,

我会及时回复的

 

另:有些大侠看见了我写的东西估计要鄙视一下了,什么OO啊,什么模式啊都没用

其实这个项目根本就没写需求分析,没画这个图那个图的

最初只是为了给某网站开发一个邮件反馈功能

后来他们觉得好用,说我要加钱,给我弄成自动反馈的.

后来有觉得好用,说我们要邮件营销,能不能给我们弄成群发的,

我汗,然后就这样了

上一篇:简单的增 删 改 查


下一篇:复杂一点的查询