0
//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下面调用的。

      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);
        }
    }

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

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

2017 年 1 月 22 日下午 3:23:04 ==> 异常消息:线程被中止。2017 年 1 月 22 日下午 3:23:04 ==> 异常源:App_Web_kxc2lbj5 异常目标站点:Void SendCandidateMail(Int32) 异常堆栈跟踪:在 Pages_ExerciseDetails.SendCandidateMail(Int32 intEmailType) 在 Pages_ExerciseDetails.ibtnSend_Click(Object sender, EventArgs e)字符串异常:System.Threading.ThreadAbortException:线程被中止。在 Pages_ExerciseDetails.SendCandidateMail(Int32 intEmailType) 在 Pages_ExerciseDetails.ibtnSend_Click(对象发件人,EventArgs e)

2017 年 1 月 22 日下午 3:23:04 ==> 异常消息:请求超时。2017 年 10 月 22 日下午 3:23:04 ==> 异常源:异常目标站点:异常堆栈跟踪:字符串异常:System.Web.HttpException:请求超时。

然后

2017 年 10 月 22 日下午 3:31:35 ==> 异常消息:引发了“System.Exception”类型的异常。2017 年 1 月 22 日下午 3:31:35 ==> 异常源:App_Web_kxc2lbj5 异常目标站点:Void SendCandidateMail(Int32) 异常堆栈跟踪:在 Pages_ExerciseDetails.SendCandidateMail(Int32 intEmailType) 字符串异常:System.Exception:类型异常'System.Exception' 被抛出。在 Pages_ExerciseDetails.SendCandidateMail(Int32 intEmailType)

我发现很难解决,因为它只发生在生产中。在 QA 和 Dev 中,电子邮件使用相同的 SMTP 服务器就可以了。

4

1 回答 1

0

我将在这里发表我的评论作为答案。

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

于 2017-01-25T04:59:24.177 回答