我有一个更新表中行的方法。它通过所有受此更改影响的公司客户,并通过电子邮件发送所有应通知此更改的用户,并附上可能的pdf文件。该文件保存在特定位置的服务器上。 这可能最终导致从此方法调用发送的20到500封电子邮件。
客户端调用此方法一次,然后服务器完成所有工作。用于电子邮件的PDF文件永远不会更改,它始终保持不变。
也许这个方法有更好的结构,或者我可以采取一些保护措施来避免服务器在运行该脚本时耗尽资源?
截至目前,发生以下错误:An existing connection was forcibly closed by the remote host
System.Net.SocketsException: An existing connection was forcibly closed by the remote host
以下是客户服务发送给我的堆栈跟踪。
以下是该方法的大部分代码:
string attach = null;
string mergerFile = FileHelper.DirectoryName.MergerDocumentDirectory(instId) + mergerDocumentFileName;
if (System.IO.File.Exists(mergerFile))
attach = mergerFile;
string subject = "subject";
StringBuilder sbEmailBody = new StringBuilder();
sbEmailBody.Append("the email body etc...");
foreach(Company in companies){
//do some business logic here
foreach(User in Company.Users){
CustomLibrary.Mail.SendEmail("from@mail.com", user.Email.Trim(), "", "", subject, true, emailBody, attach);
}
}
方法CustomLibrary.Mail.SendEmail
SmtpClient smtpClient = new SmtpClient();
MailMessage message = new MailMessage();
smtpClient.Host = WebConfigurationManager.AppSettings["mailServer"];
smtpClient.Port = 25;
message.From = new MailAddress(EmailFrom);
message.To.Add(EmailTo);
message.Subject = EmailSubject;
#region mail body
System.Text.StringBuilder sb = new System.Text.StringBuilder();
//add some header, body and footer to the email body here
#endregion
// Message body content
message.Body = sb.ToString();
//Attachment
message.Attachments.Clear();
if (!String.IsNullOrEmpty(AttachmentFile))
{
Attachment myattach = new Attachment(AttachmentFile);
message.Attachments.Add(myattach);
}
// Send SMTP mail
smtpClient.Send(message);
答案 0 :(得分:0)
您应该检查邮件服务器的日志。您可能超过了服务器设置的某个限制,导致它拒绝您的连接。
如果您无法控制邮件服务器,我建议您设置本地SMTP服务器(例如,IIS SMTP服务非常简单且功能强大)。您的代码会将本地SMTP服务中的电子邮件假脱机,然后可以进行正确的重试,超时等。