SmtpClient从发送服务器获取结果

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

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

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

你可能已经知道其余部分,但以防万一……

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

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

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

另一方面…

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

您可以使用SendCompleted Event来检查您的smtpclient是否正常工作:

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

但是您无法确认您的邮件是否已到达收件人,因为它可能卡在邮件链中的任何服务器/filter中。

你认为它是成功的,除非它抛出……虽然在这种情况下成功只意味着它被邮件服务器接受,但其他任何东西都由服务器决定…

如果你想要一点点控制,你可以使用SendAsync并挂钩SendCompleted事件……