我想用enum来总结System.Net.Mail.SmtpClient.Send
的结果。这是我知道我是否应该重试发送电子邮件,并希望阻止发送重复的电子邮件。确定System.Net.Mail.SmtpClient.Send结果
public enum MailSendStatus {
None,
Sent,
ErrorCannotSend,
TryAgain,
SentMaybe
}
我捉住了所有从Send
异常和http://msdn.microsoft.com/en-us/library/system.net.mail.smtpstatuscode(v=vs.80).aspx打出SmtpException.StatusCode
秒。故障看起来是否正确?还是有更好的方法来做到这一点?
try {
smtp.Send(msg);
} catch (ArgumentNullException e) {
return MailSendStatus.ErrorCannotSend;
} catch (ObjectDisposedException e) {
return MailSendStatus.ErrorCannotSend;
} catch (InvalidOperationException e) {
return MailSendStatus.ErrorCannotSend;
} catch (SmtpFailedRecipientsException e) {
return MailSendStatus.ErrorCannotSend;
} catch (SmtpException e) {
switch(e.StatusCode) {
case SmtpStatusCode.BadCommandSequence:
case SmtpStatusCode.MailboxNameNotAllowed:
case SmtpStatusCode.HelpMessage:
case SmtpStatusCode.SyntaxError:
case SmtpStatusCode.SystemStatus:
return MailSendStatus.ErrorCannotSend;
case SmtpStatusCode.CannotVerifyUserWillAttemptDelivery:
case SmtpStatusCode.UserNotLocalWillForward:
return MailSendStatus.SentMaybe;
case SmtpStatusCode.ClientNotPermitted:
case SmtpStatusCode.CommandNotImplemented:
case SmtpStatusCode.CommandParameterNotImplemented:
case SmtpStatusCode.CommandUnrecognized:
case SmtpStatusCode.ExceededStorageAllocation:
case SmtpStatusCode.GeneralFailure:
case SmtpStatusCode.InsufficientStorage:
case SmtpStatusCode.LocalErrorInProcessing:
case SmtpStatusCode.MailboxBusy:
case SmtpStatusCode.MailboxUnavailable:
case SmtpStatusCode.MustIssueStartTlsFirst:
case SmtpStatusCode.ServiceClosingTransmissionChannel:
case SmtpStatusCode.ServiceNotAvailable:
case SmtpStatusCode.ServiceReady:
case SmtpStatusCode.StartMailInput:
case SmtpStatusCode.TransactionFailed:
case SmtpStatusCode.UserNotLocalTryAlternatePath:
return MailSendStatus.TryAgain;
case SmtpStatusCode.Ok:
break;
}
} catch (Exception e) {
return MailSendStatus.SentMaybe;
}
return MailSendStatus.Sent;
为了清楚起见,我已经省略了日志语句,但是这些应该大部分都是在开发过程中发现的。我只是在msdn页面上包含了所有的异常http://msdn.microsoft.com/en-us/library/swas0fwc.aspx – djeeg 2011-04-14 05:45:20
我不喜欢那样。真。问题在于,它使得很难进一步发现真正的萌芽。我从不隐藏内部错误,并希望它们尽可能清晰可见,以便进行快速清理。 – TomTom 2011-04-14 05:46:14
如果我从catch树中删除这些情况,泛型'(Exception e)'将触发,返回一个“可能已发送”状态码,这是不正确的,这是一个错误,我想我可以重新抛出例外 – djeeg 2011-04-14 05:53:44