如果失败,请抓住邮件地址

时间:2013-11-21 15:01:15

标签: c#-4.0

我使用smtp将邮件发送到多个地址,我想获取sendig失败的邮件地址。

message.To.Add(new System.Net.Mail.MailAddress("xxx@gmail.com"));
message.To.Add(new System.Net.Mail.MailAddress("yyy@gmail.co.in"));
message.To.Add(new System.Net.Mail.MailAddress("zzz@gmail.com")); 
client.Send(message);

在上面的列表中,第一个和第三个邮件已发送,而第二个邮件则不能。 所以我想抓住失败的邮件地址(yyy@gmail.co.in)。

解决方案

2 个答案:

答案 0 :(得分:0)

client.Send()方法中,您应该调用try-catch块中的每个特定发送方法,然后提供失败。 另一个选择是重新抛出这样的异常并在你附加的代码中的catch块中捕获它:

try {
client.Send(message);
}
catch (Exception e)
{
//do smth with it
}

告诉我们有关您的Send()方法和client对象的更多信息。那会让我们更加具体。

答案 1 :(得分:0)

如果您使用c#SmtpClient并且可以使用SendAsync方法,这非常简单

//client and MailMessage construction
client.SendCompleted += (sender, eventArgs) => {
     string emailAddress = eventArgs.UserState as String;
     if (eventArgs.Error != null) { 
        //an error occured, you can log the email/error         
     }
     else //the email sent successfully you can log the email/success
};
client.SendAsync(mail, mail.Sender.Address);

如果你喜欢lambda可以用新的SendCompletedEventHandler(methodName)替换; 并有一个像

这样的方法
... methodName(object sender, System.ComponentModel.AsyncCompletedEventArgs eventArgs)
{
  string emailAddress = eventArgs.UserState as String;
         if (eventArgs.Error != null) { 
            //an error occured, you can log the email/error
         }
         else //the email sent successfully you can log the email/success
}