首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在system.web.mail中使用asp.net时,有些电子邮件延迟或未发送

在system.web.mail中使用asp.net时,有些电子邮件延迟或未发送
EN

Stack Overflow用户
提问于 2017-01-23 10:47:47
回答 1查看 110关注 0票数 0
代码语言:javascript
复制
//i have left out some parameters for readability
public static string MailForCandidate(string username, string FromAddr, string ToAddr, string strSubject)
        {
            try
            {
                MailMessage msg = new MailMessage();
                string strMailBody = "Test body";

                msg.To = ToAddr;
                msg.From = FromAddr;

                msg.BodyFormat = MailFormat.Html;
                msg.Priority = MailPriority.High;
                msg.Subject = strSubject;
                msg.Body = strMailBody.ToString();
                SmtpMail.SmtpServer = ConfigurationManager.AppSettings["mailServer"].ToString();
                try
                {
                    SmtpMail.Send(msg);
                    msg = null;
                    return "";
                }
                catch (Exception ex)
                {
                    Util.Common.LogErrorMessage(ex);
                    msg = null;
                    return username;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

我有上面的功能,我用它来发送来自IIS托管的.NET 3.5 asp.net应用程序的电子邮件。

电子邮件是按一下按钮发送的,收件人正在从数据库表中读取。

我遇到的问题是,一些收件人收到邮件时没有任何问题,而另一些人要花太长时间才能收到电子邮件(有时是在24小时后),而此时他们应该参加的活动已经过期(这对我的公司有法律意义)。最后,其他人并没有完全接收到电子邮件。

上面的MailForCandidate函数是从下面的SendCandidateMail调用的。

代码语言:javascript
复制
      private void SendCandidateMail(int intEmailType)
    {
        try
        {
            ArrayList arrPending = new ArrayList();
            ArrayList arrUnsent = new ArrayList();
            string strCandidatename = string.Empty;
           string stractualname = string.Empty;
            int intUnsentCandCount = 0;
            if (hdnUnsentNames.Value.Trim() != string.Empty)
            {
                arrUnsent.AddRange(hdnUnsentNames.Value.Split(','));
            }
            if (hdnPendingNames.Value.Trim() != string.Empty)
            {
                arrPending.AddRange(hdnPendingNames.Value.Split(','));
            }
            hdnUnsentNames.Value = string.Empty;
            hdnPendingNames.Value = string.Empty;
            if (!string.IsNullOrEmpty(hdnUnsent.Value) && !string.Empty.Equals(hdnUnsent.Value))
            {
                string[] strUnsIds = hdnUnsent.Value.Split('~');
                for (int i = 0; i < strUnsIds.Length; i++)
                {
                    DataSet dtsetCandidate = CandidatesListBL.GetCandidateDetails(Convert.ToInt32(strUnsIds[i]));
                    stractualname = arrUnsent[i].ToString();
                    if (dtsetCandidate.Tables[0].Rows.Count > 0)
                    {
                        if (dtsetCandidate.Tables[0].Rows[0]["Time"].ToString() != "0")
                        {
                           //i have left out some parameters for readability
                            strCandidatename = SendMail.MailForCandidate(dtsetCandidate.Tables[0].Rows[0]["User_Id"].ToString(), intEmailType);
                        }
                        else
                            strCandidatename = SendMail.MailForCandidateNoTime(dtsetCandidate.Tables[0].Rows[0]["User_Id"].ToString(), intEmailType);

                        if (strCandidatename.Trim().Equals(string.Empty))
                        {
                            hdnUnsentNames.Value = hdnUnsentNames.Value + stractualname + ",";
                            intUnsentCandCount = intUnsentCandCount + 1;

                            if (Convert.ToInt32(EnumMaster.EmailType.Customized) != intEmailType)
                            {
                                CandidatesListBL.UpdateCandidateStatus(Convert.ToInt32(strUnsIds[i]), "Sent");
                                CandidatesListBL.UpdateDateSent(Convert.ToInt32(strUnsIds[i]));
                            }
                        }
                    }
                }
                hdnUnsent.Value = string.Empty;
            }
        }
        catch (Exception ex)
        {
            WESMessage.DisplayMessage(this, this.UpdatePanel1, DanielHac.TamperProofString.QueryStringEncode("MailFailed"), this.strinfo);
            Common.LogErrorMessage(ex);
        }
    }

下面是错误日志文本文件中记录的内容。

01/22/2017 3:23:04 PM ==>异常消息:线程被中止。来源:==>异常目标站点: System.String MailForCandidate(System.String、System.Collections.ArrayList、System.String、UserSession、System.String、System.String、Int32、Int32)异常堆栈跟踪: at WES.Util.SendMail.MailForCandidate(字符串strUserID、字符串用户名、字符串密码、ArrayList alFiles、String FromName、String FromAddr、String FromName、String标题、String、String,UserSession UserObj,String strDeadLine,String strTime,Int32 intOfficeId,Int32 intMailType) at Pages_ExerciseDetails.SendCandidateMail(Int32 intEmailType)异常字符串: System.Threading.ThreadAbortException:线程被中止。at WES.Util.SendMail.MailForCandidate(String strUserID,String用户名,String password,ArrayList alFiles,String FromName,String FromAddr,String ToAddr,String title,String strSubject,String strCustomMsg,UserSession UserObj,String strDeadLine,String strTime,Int32 intOfficeId,Int32 intMailType) ()

01/22/2017 3:23:04 PM ==>异常消息:线程被中止。01/22/2017 3:23:04 PM ==>异常来源: App_Web_kxc2lbj5异常目标站点: Void SendCandidateMail(Int32)异常堆栈跟踪: at Pages_ExerciseDetails.SendCandidateMail(Int32 intEmailType) at Pages_ExerciseDetails.ibtnSend_Click(对象发送方,EventArgs e)字符串的异常: System.Threading.ThreadAbortException:线程被中止。在Pages_ExerciseDetails.SendCandidateMail(Int32 intEmailType) at Pages_ExerciseDetails.ibtnSend_Click(对象发送方,EventArgs e)

也是

01/22/2017 3:23:04下午==>异常消息:请求超时。101/22/2017 3:23:04 PM ==>异常源:异常目标站点:异常堆栈跟踪:字符串异常: System.Web.HttpException:请求超时。

然后

101/22/2017 3:31:35下午==>异常消息:抛出“System.Exception”类型的异常。01/22/2017 3:31:35 PM ==>异常来源: App_Web_kxc2lbj5异常目标站点: Void SendCandidateMail(Int32)异常堆栈跟踪: at Pages_ExerciseDetails.SendCandidateMail(Int32 intEmailType)异常字符串: System.Exception:类型为'System.Exception‘的异常被抛出。在Pages_ExerciseDetails.SendCandidateMail(Int32 intEmailType)

我觉得很难麻烦,因为它只发生在生产中。在QA和Dev中,电子邮件使用相同的SMTP服务器进行得很好。

EN

回答 1

Stack Overflow用户

发布于 2017-01-25 04:59:24

我将在这里张贴我的评论作为答案。

我解决了这个问题,只是放弃了过时的system.web.mail。我用System.Net.Mail重写了代码&所有问题都解决了,执行速度更快了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41804512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档