1

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

  • 已建立连接
  • 如果用户认证成功
  • 如果邮件发送成功等。

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

编辑:

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

  • 220 w2k Microsoft ESMTP MAIL 服务,版本:5.0.2195.6713 已于 2005 年 12 月 31 日星期六准备就绪
  • 250-w2k 你好
  • 250-AUTH GSSAPI NTLM 登录..
  • 250-AUTH=登录..
  • 250转..
  • 250-ATRN..
  • 250 尺寸 2097152..
  • 250-ETRN..
  • 250-流水线..
  • 250-DSN..
  • 250-增强状态代码..
  • 250-8bitmime..
  • 250-BINARYMIME..
  • 250-切块..
  • 250-VRFY..
  • 250 好的。。
  • 发件人:..
  • 250 2.1.0 me@mycompany.com..发件人OK..
  • RCPT到:..
  • 550 5.7.1 无法为他中继@hiscompany.com

有没有办法让这些活动现场直播,以便在每个活动到来时我都可以展示它们?

4

3 回答 3

6

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

参数NullException

  • 消息什么都没有。

无效操作异常

  • 此 SmtpClient 正在进行 SendAsync 调用。
  • MailMessage.From 什么都不是。
  • MailMessage.To、MailMessage.CC 和 MailMessage.Bcc 属性中没有指定收件人。
  • DeliveryMethod 属性设置为 Network 并且 Host 是 Nothing。
  • DeliveryMethod 属性设置为 Network 并且 Host 等于空字符串 ("")。
  • DeliveryMethod 属性设置为 Network 并且 Port 为零、负数或大于 65,535。

ObjectDisposedException

  • 此对象已被处置。

SMTP异常

  • 与 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

于 2011-10-27T21:42:01.940 回答
5

如果要基于 SMTP 会话创建日志文件,可以修改 .config 文件以自动执行此操作。此处的说明(archive.org 备份)。在这个 SO answer也可以找到相同的说明。

于 2011-10-27T21:43:46.353 回答
1

我认为,如果在任何时候您提到的 3 个步骤中的任何一个失败,您都会得到一个异常,您可以使用 try/catch 捕获该异常。

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

于 2011-10-27T21:44:05.060 回答