从C#邮件发送中获取输出

时间:2011-10-27 21:39:31

标签: c# winforms system.net.mail

我是新手做这种事情,但我想从我的应用程序中获取发送邮件的输出。例如,我希望能够知道是否

  • 已建立连接
  • 如果用户已成功通过身份验证
  • 如果邮件是成功发送的等等。

我知道如何使用System.Net.Mail发送邮件,但有没有办法获取此信息?

编辑:

在David Stratton发布的链接中,您可以看到日志并收到状态代码,如

  • 220 w2k Microsoft ESMTP MAIL服务,版本:5.0.2195.6713准备于2005年12月31日星期六
  • 250-w2k你好
  • 250-AUTH GSSAPI NTLM LOGIN ..
  • 250-AUTH = LOGIN ..
  • 250-TURN ..
  • 250 ATRN ..
  • 250-SIZE 2097152 ..
  • 250 ETRN ..
  • 250 PIPELINING ..
  • 250 DSN ..
  • 250 ENHANCEDSTATUSCODES ..
  • 250-8bitmime ..
  • 250 BINARYMIME ..
  • 250 CHUNKING ..
  • 250 VRFY ..
  • 250 OK ..
  • MAIL FROM:..
  • 250 2.1.0 me@mycompany.com ....发件人好..
  • RCPT TO:..
  • 550 5.7.1无法转发给him@hiscompany.com

有没有办法让这些活动现场直播,以便每个活动都可以显示它们?

3 个答案:

答案 0 :(得分:6)

将您的SmtpClient.Send()调用放入try / catch块并捕获以下错误。

<强> ArgumentNullException

  • 消息是Nothing。

<强>出现InvalidOperationException

  • 此SmtpClient正在进行SendAsync调用。
  • MailMessage.From是Nothing。
  • MailMessage.To,MailMessage.CC和MailMessage.Bcc属性中未指定收件人。
  • DeliveryMethod属性设置为Network,Host is Nothing。
  • DeliveryMethod属性设置为Network,Host等于空字符串(“”)。
  • DeliveryMethod属性设置为Network,Port为零,负数或大于65,535。

<强>的ObjectDisposedException

  • 此对象已被处理。

<强> SmtpException

  • 与SMTP服务器的连接失败。
  • 身份验证失败。
  • 操作超时。
  • EnableSsl设置为true,但DeliveryMethod属性设置为SpecifiedPickupDirectory或PickupDirectoryFromIis。
  • EnableSsl设置为true,但SMTP邮件服务器未在对EHLO命令的响应中公布STARTTLS。

<强> SmtpFailedRecipientsException

  • 无法将邮件传递给MailMessage.To,MailMessage.CC或MailMessage.Bcc中的一个或多个收件人。

参考:http://msdn.microsoft.com/en-us/library/swas0fwc.aspx

答案 1 :(得分:5)

如果要基于SMTP会话创建日志文件,可以修改.config文件以自动执行此操作。说明here

答案 2 :(得分:1)

我认为如果您提到的3个步骤中的任何一个步骤都失败了,您将获得一个可以通过try / catch捕获的异常。

关键点可能是最后一点,因为一旦您在SMTP服务器的队列中排队电子邮件,您就没有例外,但仍然可能发生电子邮件未发送。