C# 使用ASP.NET MVC发送时事通讯时出现IIS错误

C# 使用ASP.NET MVC发送时事通讯时出现IIS错误,c#,asp.net,asp.net-mvc,iis,C#,Asp.net,Asp.net Mvc,Iis,在我的mvc助手类中,我在发送时事通讯(给大约5000人)时遇到问题 public static void SendNewsletter(string fromAccount, string subject, string eMailText) { var userEMailAddresses = new List<string>(); using (var dbContext = new dbEntities()) { userEMailA

在我的mvc助手类中,我在发送时事通讯(给大约5000人)时遇到问题

public static void SendNewsletter(string fromAccount, string subject, string eMailText)
{
    var userEMailAddresses = new List<string>();

    using (var dbContext = new dbEntities())
    {
        userEMailAddresses =
            dbContext
                .User
                    .Where(w =>
                        !w.IsDeactivated &&
                        !w.IsBlacklisted)
                    .Select(s =>
                        s.UserName)
                    .ToList();
    }

    new Thread(() =>
    {
        for (int i = 0; i < userEMailAddresses.Count; i++)
        {
            SendMail(fromAccount, userEMailAddresses[i], subject, eMailText);
        }
    }).Start();
}
在收到大约1300封电子邮件后,我的IIS出现以下错误:


我怎样才能解决这个问题?我需要时事通讯系统…

我发现了很多错误,为什么它不起作用

第一个是MailEnable中的安全设置。在MailEnableAdmin->Servers->Localhost->Servers and Connectors->右键单击SMTP和设置->安全选项卡上,在收件人限制(1000)上有一个复选标记。我已取消选中并重新启动了服务器

在此之后,我的用户列表中有一个未验证的电子邮件地址。然后我创建了一个电子邮件检查功能:

    private static bool IsValidEMail(string eMailAddress)
    {
        if (Regex.IsMatch(eMailAddress, @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", RegexOptions.IgnoreCase) && new EmailAddressAttribute().IsValid(eMailAddress))
            return true;

        return false;
    }
我已将发送功能更新为

    public static void SendMail(string fromAccount, string toAccount, string subject, string eMailText)
    {
        if (!IsValidEMail(toAccount))
        {
            var invalidEMailAddress = toAccount;

            toAccount = "administrator@YOUR-DOMAIN.com";
            subject = "E-Mail-Address is invalid";
            eMailText = String.Format("Dear Administrator,<br><br>the following E-Mail-Address is invalid:<br><br>{0}", invalidEMailAddress);
        }

        var fromEmailAddress = new EMailModel(fromAccount);

        var body = string.Empty;
        using (var sr = new StreamReader(HostingEnvironment.MapPath("\\App_Data\\Templates\\") + "EMailTemplate.txt"))
        {
            body = sr.ReadToEnd();
        }

        body = body.Replace("%%Subject%%", subject);
        body = body.Replace("%%Body%%", eMailText);
        body = body.Replace("%%Year%%", DateTime.Now.Year.ToString());

        using (MailMessage mail = new MailMessage(fromEmailAddress.EMailAddress, toAccount))
        {
            mail.Subject = subject;
            mail.Body = WebUtility.HtmlDecode(body);
            mail.IsBodyHtml = true;

            using (SmtpClient smtp = new SmtpClient(Statics.SmtpClient, Statics.SmtpPort))
            {
                smtp.UseDefaultCredentials = false;
                smtp.Credentials = new System.Net.NetworkCredential(fromEmailAddress.EMailAddress, fromEmailAddress.Password);
                smtp.EnableSsl = Statics.SslEnabled;
                try
                {
                    smtp.Send(mail);
                    Thread.CurrentThread.Join(1000);
                }
                catch (Exception) { }
            }
        }
    }
publicstaticvoidsendmail(stringfromcount、stringtoaccount、stringsubject、stringemailtext)
{
如果(!IsValidEMail(待核算))
{
var invalidEMailAddress=toAccount;
toAccount=”administrator@YOUR-域名(DOMAIN.com),;
subject=“电子邮件地址无效”;
eMailText=String.Format(“尊敬的管理员,

以下电子邮件地址无效:

{0}”,invalidEMailAddress); } var fromEmailAddress=新的EMailModel(fromAccount); var body=string.Empty; 使用(var sr=new StreamReader(HostingEnvironment.MapPath(“\\App\u Data\\Templates\\”)+“EMailTemplate.txt”)) { body=sr.ReadToEnd(); } 正文=正文。替换(“%%Subject%%”,Subject); body=body.Replace(“%%body%%”,eMailText); body=body.Replace(“%%Year%%”,DateTime.Now.Year.ToString()); 使用(MailMessage mail=new MailMessage(fromEmailAddress.EMailAddress,toAccount)) { mail.Subject=主题; mail.Body=WebUtility.HtmlDecode(Body); mail.IsBodyHtml=true; 使用(SmtpClient smtp=新SmtpClient(Statics.SmtpClient,Statics.SmtpPort)) { smtp.UseDefaultCredentials=false; smtp.Credentials=新系统.Net.NetworkCredential(fromEmailAddress.EMailAddress,fromEmailAddress.Password); smtp.EnableSsl=Statics.SslEnabled; 尝试 { smtp.发送(邮件); Thread.CurrentThread.Join(1000); } 捕获(异常){} } } }
而SendNewsletter的功能是相同的。现在,所有的电子邮件都出去了


非常感谢所有提供帮助的用户

Thread.CurrentThread.Join(1000)???我们有一个邮件系统,它在处理了太多的电子邮件后就崩溃了。我们的邮件服务器似乎被阻塞了,所以我们设置了一个循环计数器和一个挂起时间,即处理10封邮件,等待10秒,冲洗并重复。它现在运行良好,也许值得在您的案例中进行调查?就我个人而言,我会尝试使用经过尝试和测试的异步发送和结束,而不是重新发明轮子。。。例如EASendMail。。。正如雨果所说。。确保电子邮件服务器上没有垃圾邮件过滤器,例如,1分钟内发送100多封电子邮件=垃圾邮件=阻止。。。路线上有病毒检查吗?因为它们也可以有垃圾邮件过滤器。@FalcoAlexander Thread.CurrentThread.Join(1000)与Thread.Sleep(1000)相同。
    public static void SendMail(string fromAccount, string toAccount, string subject, string eMailText)
    {
        if (!IsValidEMail(toAccount))
        {
            var invalidEMailAddress = toAccount;

            toAccount = "administrator@YOUR-DOMAIN.com";
            subject = "E-Mail-Address is invalid";
            eMailText = String.Format("Dear Administrator,<br><br>the following E-Mail-Address is invalid:<br><br>{0}", invalidEMailAddress);
        }

        var fromEmailAddress = new EMailModel(fromAccount);

        var body = string.Empty;
        using (var sr = new StreamReader(HostingEnvironment.MapPath("\\App_Data\\Templates\\") + "EMailTemplate.txt"))
        {
            body = sr.ReadToEnd();
        }

        body = body.Replace("%%Subject%%", subject);
        body = body.Replace("%%Body%%", eMailText);
        body = body.Replace("%%Year%%", DateTime.Now.Year.ToString());

        using (MailMessage mail = new MailMessage(fromEmailAddress.EMailAddress, toAccount))
        {
            mail.Subject = subject;
            mail.Body = WebUtility.HtmlDecode(body);
            mail.IsBodyHtml = true;

            using (SmtpClient smtp = new SmtpClient(Statics.SmtpClient, Statics.SmtpPort))
            {
                smtp.UseDefaultCredentials = false;
                smtp.Credentials = new System.Net.NetworkCredential(fromEmailAddress.EMailAddress, fromEmailAddress.Password);
                smtp.EnableSsl = Statics.SslEnabled;
                try
                {
                    smtp.Send(mail);
                    Thread.CurrentThread.Join(1000);
                }
                catch (Exception) { }
            }
        }
    }