求大神帮忙哇!!!!!---[ASP.NET定时邮件发送问题]
问题描述:下面函数是一定时器,监测时间以达到每天定时发送邮件:
public void TimeEvent(object sender, ElapsedEventArgs e)
{
// 获取当前事件
DateTime now = DateTime.Now;
TimeSpan nowTime = now.TimeOfDay;
RegularlyOperatePara regOperPara = InitParaObj();
string nowTimeStr = now.ToString("HH:mm:ss");
if (regOperPara != null && regOperPara.TimeList.Contains(nowTimeStr))
{
regOperPara.NowTime = nowTime;
// 启动邮件发送线程
Thread sendmailThread = new Thread(new ParameterizedThreadStart(
new RegularlySendmailThread().Sendmail));
sendmailThread.Start(regOperPara);
}
//m_Index++;
}
在线程函数Sendmail(其主要功能是读取网络路径下的数据入库,并分析统计DB的数据后将结果存放在MailOperPara对象中--此处能够正常执行)执行到最后,会调用下面的函数初始化邮件内容,并发送邮件:
public void SendEmail()
{
try
{
// 获取邮件主体
string body = GetEmailSendBody();
// 设置发件方信息
m_EmailSend.SetFrom(m_MailOperPara.EmailConfigInfo.FromAddress, m_MailOperPara.EmailConfigInfo.Alais);
// 初始化smtp服务器信息
m_EmailSend.SetSmtpClient(m_MailOperPara.EmailConfigInfo.Mailhost, m_MailOperPara.EmailConfigInfo.GetLoginName(),
m_MailOperPara.EmailConfigInfo.Password);
List<string> mainSenderList = m_MailOperPara.EmailConfigInfo.MainSenderList;
for (int i = 0; i < mainSenderList.Count; i++)
{
mainSenderList[i] += m_MailOperPara.EmailConfigInfo.DefaultSuffix;
}
// 设置主送
m_EmailSend.SetTo(mainSenderList);
List<string> copySenderList = m_MailOperPara.EmailConfigInfo.CopySenderList;
for (int i = 0; i < copySenderList.Count; i++)
{
copySenderList[i] += m_MailOperPara.EmailConfigInfo.DefaultSuffix;
}
// 设置抄送
m_EmailSend.SetCC(copySenderList);
// 设置发送内容
m_EmailSend.SetSendContent(SetEmailSubject(m_MailOperPara.EmailConfigInfo.SuffixOfTitle), body, true);
if (m_EmailSend.Send())
{
//DeleteAllImg();
}
m_EmailSend.DisposeAtta();
}
catch (System.Exception ex)
{
//LogRecord.WriteLog(LogType.Exception, ex.Message, "SendMail");
}
}
在单步调试该函数时,每一次都会抛出“SmtpException由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值”,但是每次单步走到的地方都不一样;而如果是直接将断点打到下面函数的"this.m_SmtpClient.Send(m_mailMsg);"这段代码处时,该线程能够执行到此处,再按一次F10同样抛出上面的异常;
public bool Send()
{
try
{
if (this.m_mailMsg == null || this.m_SmtpClient == null)
{
return false;
}
this.m_SmtpClient.Send(m_mailMsg);
return true;
}
catch (System.Exception ex)
{
//LogRecord.WriteLog(LogType.Exception, ex.Message, "SendEmail");
return false;
}
}
而如果将断点打在"this.m_SmtpClient.Send(m_mailMsg);"此处,并选中它并点击邮件,然后点击“快速监测”,则可以发送一封邮件出来,再接着按F10,又会出现上面的异常。求各位大神帮帮忙
谢谢!!! asp.net 邮件 线程 SmtpException
补充:.NET技术 , ASP.NET