为什么没有';在以C#异步发送电子邮件后,我是否会收到所有电子邮件?

为什么没有';在以C#异步发送电子邮件后,我是否会收到所有电子邮件?,c#,email,asynchronous,delegates,C#,Email,Asynchronous,Delegates,我使用特定的类异步发送电子邮件。您可以找到原始类 此类使用委托函数发送电子邮件: public class Email { public bool SendEmail(MailMessage message) { try { SmtpClient smtpClient = new SmtpClient(); smtpClient.Host = "

我使用特定的类异步发送电子邮件。您可以找到原始类

此类使用委托函数发送电子邮件:

public class Email
    {
        public bool SendEmail(MailMessage message)
        {
            try
            {
                SmtpClient smtpClient = new SmtpClient();
                smtpClient.Host = "smtp.gmail.com";
                smtpClient.Port = 587;
                smtpClient.EnableSsl = true;
                ...
                smtpClient.Send(message);
            }
            catch (Exception ex)
            {
                ErrorLogger.SaveLog(ex);
            }
            return true;
        }
        public delegate bool SendEmailDelegate(MailMessage message);

        public void GetResultsOnCallback(IAsyncResult ar)
        {
            SendEmailDelegate del = (SendEmailDelegate)((AsyncResult)ar).AsyncDelegate;
            try
            {
               bool result = del.EndInvoke(ar);
            }
            catch (Exception ex)
            {
                ErrorLogger.SaveLog(ex);
            }
        }

        public void SendEmailAsync(MailMessage message)
        {
            try
            {
                SendEmailDelegate dc = new SendEmailDelegate(this.SendEmail);
                AsyncCallback cb = new AsyncCallback(this.GetResultsOnCallback);
                IAsyncResult ar = dc.BeginInvoke(message, cb, null);
            }
            catch (Exception ex)
            {
                ErrorLogger.SaveLog(ex);
            }
        }
    }
但在我用ASP.NETMVC2开发的网站上,当我尝试发送96封电子邮件时,只收到了其中的几封。在我的第一次测试中,我收到52封电子邮件,在第二次测试中收到57封电子邮件

我有一个静态类来调用sending emails对象

public static class EmailSender
{
  private static void SendEmail(MailMessage mail)
  {
     Email sender = new Email();
     sender.SendEmailAsync(mail);
  }

  public static void SendRevival(UserViewModel user){
    ...
    SendEmail(mailMessage);
  }
}
我是这样用的:

foreach(UserViewModel user in users){
   EmailSender.SendRevival(user);
}
应用程序和服务器都没有错误

有人知道发生了什么事吗


Thx.

您是否正在查看您呼叫的返回结果

sender.SendEmailAsync(mail);
看看邮件是否真的被发送了

我刚刚查看了这个方法的源代码,它是这样做的:

public bool SendEmailAsync(string toEmail, string toName)
        {
            try
            {
                SendEmailDelegate dc = new SendEmailDelegate(this.SendEmail);
                AsyncCallback cb = new AsyncCallback(this.GetResultsOnCallback);
                IAsyncResult ar = dc.BeginInvoke(toEmail, toName, cb, null);
            }
            catch (Exception ex)
            {
                return false;
            }
            return true;
        }
也就是说,代码捕获抛出的任何异常并简单地返回false。不仅如此,在AsyncCallback中,它也会做同样的事情,即“吃掉”异常,您永远不会知道任何异常

要调试您的问题,我将使用同步的
sendmail
调用,并将他的代码(在
sendmail
方法中)更改为NOT捕获异常,以便被叫方(您)知道发生了什么。乙二醇

 private static void SendEmail(MailMessage mail)
 {
     Email sender = new Email();
     sender.SendEmail(mail);//modify this method as well!
 }

您是否查看了邮件服务器进出的HTTP流量?您是否确认了邮件服务器没有将其视为垃圾邮件,或者因为您向服务器“发送”了大量请求而拒绝了它们?您是否将web服务器实例保留足够长的时间以发送所有请求。如果你关闭这个程序,它就会停止发送。我使用谷歌应用程序,所以gmail会发送我所有的电子邮件。所有收到的邮件都不属于垃圾邮件@Chris Sainty:web服务器实例是由IIS管理的,不是吗?IIS在20分钟不活动后关闭进程。我不确定我说的是同一件事。我更改了发送对象,你可以在第一条消息中看到。但是我的日志文件中没有错误。在我最后一次尝试中,我只收到96封邮件中的34封。如果你发送到相同的电子邮件地址,你每次收到的电子邮件数量是相同的还是有所不同?我将96封邮件发送到相同的邮件地址(我的gmail地址)。我从未收到过同样数量的电子邮件:x