我用System.Net.Mail.SmtpClient 的 SendAsync()循环发送邮件,为什么发送一段时间后,就发送失败了

talktoxhl 2008-04-09 06:38:08
我用多线程,调用System.Net.Mail.SmtpClient 的 SendAsync()循环发送邮件,为什么发送一段时间后,就发送开始都失败了,
重启应用后,又能继续发了,为什么?
public int SendMailByNetMail()
{
//System.Net.Mail.MailMessage myEmail = new System.Net.Mail.MailMessage(MailServerMailID, ToMailID);
System.Net.Mail.MailMessage myEmail = new System.Net.Mail.MailMessage(MailServerUserName, ToMailID);

myEmail.Subject = Subject;
myEmail.Body = SBody;
myEmail.Priority = MailPriority.High ;
myEmail.IsBodyHtml = true; //邮件形式,.Text、.Html
System.Net.Mail.SmtpClient smtpclient = new SmtpClient();
smtpclient.Host = MailServerHost ;
smtpclient.Port = Convert.ToInt32(MailServerPort) ;
smtpclient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpclient.Credentials = new System.Net.NetworkCredential(MailServerMailID, MailServerPassWord);
if (MailNeedSSL == "1")
{
smtpclient.EnableSsl = true;
}
smtpclient.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);

try
{

smtpclient.SendAsync(myEmail,"");
return 1;
}
catch (Exception ex)
{
string ss = ex.Message;
smtpclient.SendAsyncCancel();

return 2;

}
myEmail.Dispose();
return 1;

}
/// <summary>
/// 发送邮件后,处理相应的收件人表,发件人表的状态
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
{
// Get the unique identifier for this asynchronous operation.
if (FromID != "" && ToID != "")
{
String token = (string)e.UserState;

int bstate = 0;
if (e.Error != null)
{
bstate = 2;
PublicVariable.IFalseMailCount = PublicVariable.IFalseMailCount + 1;
}
else
{
bstate = 1;
PublicVariable.ITrueMailCount = PublicVariable.ITrueMailCount + 1;
}

if(PublicVariable.IsTestMail==0)
MailDataTable.UpdateFromANDToData(FromID, ToID, bstate.ToString(),CheapCardID);//错误并更新数据库 合并成存储过程

PublicVariable.INowMailCount = PublicVariable.INowMailCount + 1+PublicVariable.SendMailChaoSongNum ;

DataTable dt = PublicVariable.BackViewInfo;
DataRow dr = dt.NewRow();

dr.ItemArray = new string[8] { MailServerUserName, MailServerMailID, MailServerHost, MailServerPort, ToMailID, iNowCiChaoSongNum.ToString(), (bstate==1?"成功":"失败"), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") };


dt.Rows.InsertAt(dr, 0);
if (dt.Rows.Count > 100)
{
dt.Rows.RemoveAt(dt.Rows.Count - 1);
}
PublicVariable.BackViewInfo = dt;
}

}
...全文
1905 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
LQknife 2008-08-21
  • 打赏
  • 举报
回复
好长的代码,
看看msdn吧
talktoxhl 2008-04-09
  • 打赏
  • 举报
回复
补充一下,我用的是多线程来调用发邮件的方法,我有时走300多个线程就一个都不能发送了,有的时候走2千个才不能发送。有碰到的吗,求解!!

17,741

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧