SmtpClient 发送方法返回 void。有什么办法可以得到服务器响应?我是否只是假设它是成功的,除非它引发异常?
我指的类... http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.aspx
SmtpClient 发送方法返回 void。有什么办法可以得到服务器响应?我是否只是假设它是成功的,除非它引发异常?
我指的类... http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.aspx
要回答您的第二点,是的,您所能做的就是假设它是成功的——这意味着它将消息发送到服务器并且服务器接受了它,除非您遇到异常。
您可能已经知道其余的内容,但以防万一...
从那里,电子邮件可能会丢失并且无法以多种方式传递。您的服务器可能会接受它并决定不发送它,或者接受它并在崩溃之前断电。它可能会被垃圾邮件过滤器阻止,等等。
您可以将电子邮件视为类似于一封普通邮件,因为它在发件人和收件人之间经过几手。从您的代码中,您只能确认它已到达您用于发送的 SMTP 服务器,这类似于将其交给邮局的柜员。您不知道(或需要知道)消息是如何从那里路由的。它可以是空中、地面或信鸽。你不在等式 - 你不需要知道它是如何发送的,只要你相信他们知道如何发送它。(对于电子邮件也可以这样说。)
如果您需要确认收件人打开了它,有一些方法可以将图像嵌入到您服务器上的 HTML 消息中,并在访问该图像时在您的日志中进行跟踪,等等(Google 电子邮件跟踪和电子邮件打开跟踪)
另一方面...
如果服务器拒绝它,那么您确实会以某种方式得到服务器响应 - 错误中应该有一个错误代码和描述,您可以使用它来解决它为什么没有成功,或使用错误处理尝试另一条路线等
您可以使用 SendCompleted 事件来检查您的 smtpclient 是否正常工作,如下所示:http:
//msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.sendcompleted.aspx
但是您无法确认您的消息到达收件人,因为它可能卡在消息链中的任何服务器/过滤器中。
你假设它是成功的,除非它抛出......虽然在这种情况下成功只意味着它被邮件服务器接受,其他任何事情都取决于服务器......
如果您想要一点控制权,您可以使用SendAsync
并挂钩SendCompleted
事件......