当前位置:编程学习 > C#/ASP.NET >>

求大神帮忙哇!!!!!---[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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,