我使用特定的類異步發送電子郵件。你可以找到原始類別here。爲什麼我在C#中異步發送郵件後沒有收到所有電子郵件?
這個類使用委託函數來發送郵件:
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.NET MVC 2的發展,當我嘗試發送電子郵件96,只有少數被接收。在我的第一次測試中,我收到了52封電子郵件和第二封57封電子郵件。
我有這個靜態類調用發送電子郵件對象
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。
你看過進出郵件服務器的HTTP流量嗎? – scottheckel
您確認您的郵件服務器不會將它們當作垃圾郵件處理,還是因爲您使用請求「淹沒」服務器而拒絕它們? –
您是否將Web服務器實例的時間足夠長,以便將它們全部發送出去。如果你關閉了這個過程,那麼它會停止發送。 –