【发布时间】:2013-12-04 13:34:29
【问题描述】:
当我用C#编程批量发送邮件时,我的代码是这样的:
public static bool Send(MailAddress Messagefrom,
string MessageTo,
string MessageSubject,
string MessageBody)
{
MailMessage message = new MailMessage();
message.From = Messagefrom;
message.To.Add(MessageTo);
message.Subject = MessageSubject;
message.Body = MessageBody;
message.BodyEncoding = System.Text.Encoding.UTF8;
//message.SubjectEncoding = Encoding.BigEndianUnicode;
message.IsBodyHtml = true;
message.Priority = MailPriority.High;
MailHelper mh = new MailHelper();
SmtpClient sc = mh.setSmtpClient("smtp.qq.com", 25);
sc.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);
try
{
sc.SendAsync(message, message);
}
catch (Exception e)
{
LogHelper.WriteLog("Main send failed....\t the detail info:" +
e.ToString());
return false;
}
return true;
}
这是个问题!当第一封邮件发送失败时(例如邮件地址为null),下一封邮件无法发送!
因为我有很多邮件等待发送,如果出现这种情况,如何解决?例如失败的邮件可能还在这张桌子上,管理员手动处理。
但是这种情况很可能在Send函数中,为什么会这样呢?
【问题讨论】:
-
您是否在 foreach 循环中发送邮件?您应该更改 Send() 的调用者,以便当它为一封邮件崩溃时,记录错误并继续发送下一封邮件
-
是的,我用的是foreach循环,还在用循环吗?
-
您可以尝试在 catch 块中调用 SendAsyncCancel 方法。请参阅“备注”下的msdn.microsoft.com/library/x5x13z6h.aspx。
-
SendAsync() 函数在崩溃时不发送下一条消息?如果那为什么叫异步?
-
来自 microsoft 知识库:调用 SendAsync 后,您必须等待电子邮件传输完成,然后再尝试使用 Send 或 SendAsync 发送另一封电子邮件。 - 所以我猜你必须取消发送过程。