环境是VS2005,ASP.NET客户端使用ajax调用服务端的一个页面来进行发送邮件的操作,客户端可以导入批量的email地址,原先没有用线程的方法,发送批量邮件都没有问题,
为避免公司邮件服务器被封锁,我想设置服务器端邮件发送每隔2秒执行一次。
设计为用线程的sleep方法来暂停邮件的发送,但改动程序后,发现总是有异常,请指点一下问题出在哪?谢谢附上代码:
protected void Page_Load(object sender, EventArgs e)
    {
        
        
        if (Request.QueryString["addr"] != null)
        {
            string userName = Request.Form["userName"].ToString();
            string pwd = Request.Form["pwd"].ToString();
            string subject = Request.Form["subject"].ToString();
            string body = Request.Form["body"].ToString();
            string dispName = Request.Form["dispName"].ToString();
            string server = Request.Form["server"].ToString();
            string attach = "";
            if (Request.Form["attach"] != null)
            {
                attach = Request.Form["attach"].ToString();
            }            string addr = Request.QueryString["addr"].ToString();            Email email;
            
            email.userName = userName;
            email.pwd = pwd;
            email.subject = Server.UrlDecode(subject);
            email.body = Server.UrlDecode(body).Replace("&lt;","<").Replace("&gt;",">");
            email.dispName = Server.UrlDecode(dispName);
            email.server = server;
            email.addr = addr;
            email.attach = Server.UrlDecode(attach);            
            Thread t = new Thread(new ParameterizedThreadStart(SendMail));
            t.Start(email);
            t.IsBackground = false;
            Thread.Sleep(2000);            
            
        }
}
private void SendMail(object oemail)
    {        Email email = (Email)oemail;
        jmail.MessageClass myJmail = new jmail.MessageClass();
        myJmail.Charset = "GB2312";
                // 优先级
        myJmail.Priority = Convert.ToByte(1);
        myJmail.From = email.userName;
        myJmail.FromName = email.dispName;
        myJmail.Subject = email.subject;
        //身份验证的用户名
        
        myJmail.MailServerUserName = email.userName;
        myJmail.MailServerPassWord = email.pwd;        StringBuilder semail = new StringBuilder();
        semail.Append(email.body);
        
        myJmail.HTMLBody = semail.ToString();                myJmail.AddRecipient(email.addr, "", "");        try
        {
            string s = Session.SessionID;
            if (email.attach != "")
            {
                if (email.attach.IndexOf(",") > -1)
                {
                    string[] files = email.attach.Split(',');
                    for (int i = 0; i < files.Length; i++)
                    {
                        myJmail.AddAttachment(Server.MapPath("../UploadFiles/" + s + "/") + files[i], false, "");
                    }
                }
                else
                {
                    myJmail.AddAttachment(Server.MapPath("../UploadFiles/" + s + "/") + email.attach, false, "");
                }
            }                        if (myJmail.Send(email.server,false))
            {
                HttpContext.Current.Response.Write("成功提交至邮件服务器");
                //Response.Write("成功提交至邮件服务器");
                //加上线程操作后,运行到这里总是提示异常,未处理 System.NullReferenceException,但邮件还是可以发出去
  
            }
            else
            {
                HttpContext.Current.Response.Write("提交至邮件服务器失败");
                //Response.Write("提交至邮件服务器失败");
            }
        }
        catch(ThreadStartException ex)
        {
            
            myJmail.Close();
            HttpContext.Current.Response.Write(email.addr + " 发送失败 ");
            //Response.Write(email.addr + " 发送失败 ");
        }
        
    }