//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);
}
}
以下是错误日志文本文件中记录的内容。
01/22/2017 3:23:04 PM ==&gt;异常消息:线程正在中止。 01/22/2017 3:23:04 PM ==&gt;异常来源: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) 在Pages_ExerciseDetails.SendCandidateMail(Int32 intEmailType) 字符串异常:System.Threading.ThreadAbortException:正在中止线程。 在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) 在Pages_ExerciseDetails.SendCandidateMail(Int32 intEmailType)
和
01/22/2017 3:23:04 PM ==&gt;异常消息:线程正在中止。 01/22/2017 3:23:04 PM ==&gt;异常来源:App_Web_kxc2lbj5 异常目标站点:Void 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(对象发件人,EventArgs e)
另外
01/22/2017 3:23:04 PM ==&gt;异常消息:请求超时。 101/22/2017 3:23:04 PM ==&gt;例外来源:例外目标网站: 异常堆栈跟踪:字符串异常:System.Web.HttpException: 请求超时。
然后
101/22/2017 3:31:35 PM ==&gt;异常消息:类型异常 抛出'System.Exception'。 01/22/2017 3:31:35 PM ==&gt;例外 来源:App_Web_kxc2lbj5异常目标站点:无效 SendCandidateMail(Int32)异常堆栈跟踪:at Pages_ExerciseDetails.SendCandidateMail(Int32 intEmailType)异常 To String:System.Exception:'System.Exception'类型的异常 抛出。在Pages_ExerciseDetails.SendCandidateMail(Int32 intEmailType)
我觉得很难麻烦,因为它只在生产中发生。在QA和Dev中,使用相同的SMTP服务器的电子邮件正常。
答案 0 :(得分:0)
我将在此发表评论作为答案。
我解决了这个问题,只是丢弃了过时的system.web.mail。一世 使用System.Net.Mail&amp; amp;重写代码。所有问题都得到解决, 表现得更快。