SmtpClient从发送服务器获取结果

BZi*_*ink 13 .net c# system.net.mail smtpclient

SmtpClient发送方法返回void.有没有办法得到服务器响应?除非它抛出异常,我才假设它成功了吗?

我指的是...... http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.aspx

Dav*_*vid 18

要回答你的第二点,是的,你所能做的就是假设它成功了 - 这意味着它将消息传递给服务器并且服务器接受它,除非你得到一个例外.

你可能已经知道其余的了,但以防万一......

从那里,电子邮件可能会丢失,而不是以任何方式提供.您的服务器可能会接受它并决定不发送它,或接受它并在崩溃之前断电.它可能会被一个垃圾邮件过滤器阻止,等等.

您可以将电子邮件视为与常规邮件类似,因为它通过发件人和收件人之间的几手牌传递.从您的代码中,您只能确认它到达您用来发送的SMTP服务器,这类似于将其交给邮局的出纳员.您不知道(或需要知道)消息是如何从那里路由的.它可以是空中,地面或载体鸽.你不在乎 - 你不需要知道它是如何发送的,只要你相信它们知道如何发送它.(电子邮件也是如此.)

如果您需要确认收件人是否已将其打开,则可以在服务器上的HTML邮件中嵌入图片,并在访问该图片时在日志中进行跟踪等.(Google电子邮件跟踪和电子邮件打开跟踪)

另一方面...

如果服务器拒绝它,那么你会以一种说法来获得服务器响应 - 错误中应该有一个错误代码和一个描述,你可以用它来解决它没有成功的原因,或者使用错误处理尝试另一条路线等

  • +1:除了"您不需要知道它是如何被发送"之外,应该是一个说明,虽然电子邮件*通常*很快就会被移除,但各种垃圾邮件控制和服务器设置可能会导致单个电子邮件被延迟几分钟到几天之间的任何地方. (2认同)
  • 有时服务器会以 250 ok 返回他们的消息 ID .. 所以没有看到成功的响应是很糟糕的...... (2认同)

Dim*_*ima 5

您可以使用 SendCompleted 事件来检查您的 smtpclient 是否正常工作,如下所示:

http : //msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.sendcompleted.aspx

但您无法确认您的消息到达收件人,因为它可能卡在消息链中的任何服务器/过滤器中。