2017-01-23 4 views
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; 
      } 
     } 

У меня есть функция выше, которую я использую для отправки писем из приложения .NET 3.5 asp.net, содержащего IIS.Некоторые электронные письма были отложены или не доставлены при использовании system.web.mail в 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); 
     } 
    } 

Ниже приведено то, что регистрируется в текстовом файле журнала ошибок.

22.01.2013 3:23:04 PM ==> Сообщение об исключении: нить прерывалась. 22.01.2013 3:23:04 PM ==> Исключение Источник: 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 username, 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) at Pages_ExerciseDetails.SendCandidateMail (Int32 intEmailType) Исключение до строки: System.Threading.ThreadAbortException: поток прерывается. на WES.Util.SendMail.MailForCandidate (String strUserID, имя пользователя String, пароль String, ArrayList alFiles, String FromName, String FromAddr, String ToAddr, заголовок String, String strSubject, String strCustomMsg, UserSession UserObj, String strDeadLine, String strTime, Int32 intOfficeId, Int32 intMailType) на Pages_ExerciseDetails.SendCandidateMail (Int32 intEmailType)

И

01/22/2017 3:23:04 PM ==> Exception Сообщение: тема была быть прервана. 01/22/2017 3:23:04 PM ==> Исключение Источник: App_Web_kxc2lbj5 Исключение Цель сайта: Пустота SendCandidateMail (Int32) трассировки стека исключений: в Pages_ExerciseDetails.SendCandidateMail (Int32 intEmailType) в Pages_ExerciseDetails.ibtnSend_Click (отправитель объекта , EventArgs e) Исключение до строки: System.Threading.ThreadAbortException: поток прерывается. в Pages_ExerciseDetails.SendCandidateMail (Int32 intEmailType) в Pages_ExerciseDetails.ibtnSend_Click (отправителем Object, EventArgs е)

Также

01/22/2017 3:23:04 PM ==> Exception сообщение : Истекло время запроса. 101/22/2017 3:23:04 PM ==> Исключение Источник: Исключение Целевой сайт: Исключение стека: исключение в строку: System.Web.HttpException: Истекло время ожидания запроса.

Тогда

101/22/2017 3:31:35 PM ==> Сообщение исключения: Исключение типа 'System.Exception' был брошен. 01/22/2017 3:31:35 PM ==> Исключение Источник: App_Web_kxc2lbj5 Исключение Цель сайта: Пустота SendCandidateMail (Int32) Исключение Трассировка стека: на Pages_ExerciseDetails.SendCandidateMail (Int32 intEmailType) Исключение Для строки: System.Exception : Исключение типа «System.Exception» составило . в Pages_ExerciseDetails.SendCandidateMail (Int32 intEmailType)

Я нахожу это трудно, потому что он диагностирован происходит в производстве ТОЛЬКО. В QA и Dev электронные письма просто отлично работают с одним и тем же SMTP-сервером.

+0

В чем разница между MailForCandidateNoTime и MailForCandidate? – Karlta05

+0

нет существенной разницы, кроме как разницы в теле письма – StackTrace

+0

Просто интересно, следует ли мне использовать пространство имен System.Net.Mail вместо этого, потому что system.web.mail просто терпит неудачу с большой информацией? – StackTrace

ответ

0

Я просто отправлю свой комментарий здесь в качестве ответа.

Я решил, что это просто отбрасывает устаревший system.web.mail. I переписал код с помощью System.Net.Mail & все проблемы решены, выполняет еще намного быстрее.

Смежные вопросы