SmtpClient发送邮件时从服务器获取结果

17
3个回答

23
为了回答你的第二点,是的,除非出现异常,否则你只能假设发送邮件成功,这意味着它已将消息发送到服务器并被服务器接受。
你可能已经知道其余部分,但以防万一...
从那里开始,电子邮件可能会以任何方式丢失并且无法交付。您的服务器可能会接受它并决定不发送它,也可能在崩溃之前失去电源。 它可能会在途中被垃圾邮件过滤器阻止等。
您可以将电子邮件视为类似于常规邮件,因为它在发送者和收件人之间经过几个手部。从您的代码中,您只能确认它是否已到达用于发送邮件的SMTP服务器,这类似于将其交给邮局的出纳员。 您不知道(或不需要知道)消息如何从那里路由。 可能是通过空中,地面或鸽子运输。 您已经出了方程式,您不需要知道如何发送它,只需相信他们知道如何发送它。(电子邮件也可以这样说。)
如果您需要确认收件人是否打开了它,则可以在HTML消息中嵌入映像,并跟踪在您的日志中访问该映像的时间等。(谷歌电子邮件追踪和电子邮件打开追踪)
另一方面...
如果服务器拒绝了它,则您会以某种方式获得服务器响应-错误代码和错误描述应该在错误中,您可以使用它们来排除为什么无法成功发送邮件的问题,或使用错误处理尝试另一条路线等。

2
除了“你不需要知道它是如何发送的”之外,还应该有一条说明,即尽管电子邮件通常会很快地发送出去,但各种垃圾邮件控制和服务器设置可能会导致单个电子邮件被延迟数分钟甚至数天。 - NotMe
2
有时服务器会返回带有250 ok的消息ID,所以不看到成功响应是不好的...... - Mustafa Düman

6

那个例子甚至都不能运行。在 new smptClient(args[0]) 上抛出了越界数组异常。 - Autonomic

2

假设它没有抛出异常,你可以认为发送成功了......虽然在这种情况下,成功只意味着被邮件服务器接受,其他的事情就取决于服务器了......

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接