为什么没有';在以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