Когда я программа с C# для отправки почты по партии, мой код выглядит так:Как понять функцию C# SendAsync?
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(), чтобы при сбое для одной почты зарегистрировать ошибку и продолжить отправку следующего сообщения – RononDex
Да, я использую цикл foreach, все еще используя цикл? – Dolphin
Вы можете попробовать вызвать метод SendAsyncCancel в блоке catch. См. Http://msdn.microsoft.com/library/x5x13z6h.aspx в разделе «Примечания». – Frank