环境是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("<","<").Replace(">",">");
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 + " 发送失败 ");
}
}
为避免公司邮件服务器被封锁,我想设置服务器端邮件发送每隔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("<","<").Replace(">",">");
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 + " 发送失败 ");
}
}
解决方案 »
- 请教各位高手!
- [高分求助] 如何通过 httpwebrequest 实现路由器自动断线
- 我的winform控件里有子控件,希望设计时点击子控件,属性栏显示对应的依然是父容器?
- 我在plsql 里可以登陆远程数据库,可在我的程序里报错 用户名/口令无效; 登录被拒绝
- 关于多线程的问题,高手们帮帮忙。
- 【这个BUG怎么解决啊?大家帮帮忙!】
- 在C#中如何才能做到自动提交某个网页表单?(按照以前的帖子试了半天都没成功)
- UdpClient.Receive方法的编码问题
- IE内核损坏
- 知道文件的绝对IP地址,怎样在网上下载
- (WinFrom)MDI多文档程序子窗口之间如何SendMessage?
- 一段代码涉及位操作,看不懂
不然资源互斥,会出现异常
lock(object)
{
//dosomething...
}