我正在使用 C# 编写一个邮件应用程序,基本上,我需要能够确定哪些收件人成功收到了邮件,哪些没有收到,无论失败原因是什么。
总之,例如,每当电子邮件地址不存在时,我都需要抛出异常。但是,在这种情况下, SmtpClient.Send 不会引发异常,因此我可能需要监视传递失败的回复并解析它们。
我知道这不是一项简单的任务,所以我想请教各位专家关于如何处理电子邮件发送的主要问题的一些技巧。
提前致谢!!
我正在使用 C# 编写一个邮件应用程序,基本上,我需要能够确定哪些收件人成功收到了邮件,哪些没有收到,无论失败原因是什么。
总之,例如,每当电子邮件地址不存在时,我都需要抛出异常。但是,在这种情况下, SmtpClient.Send 不会引发异常,因此我可能需要监视传递失败的回复并解析它们。
我知道这不是一项简单的任务,所以我想请教各位专家关于如何处理电子邮件发送的主要问题的一些技巧。
提前致谢!!
除非您使用带有您跟踪或类似哈希的图像,否则出于安全原因,我认为您无法使用。许多邮件客户端也不会自动下载图像。
想象一下,如果垃圾邮件发送者能够可靠地确定他们收到了哪些电子邮件?
您可以尝试 ping 服务器...即 gmail.com,但我也不知道这有多可靠。
您无法可靠地检测到这一点。这是 SMTP 协议的本质。这完全取决于收件人 SMTP 服务器来选择告诉您电子邮件是否已送达。
您的特定要求根本无法以高性能的方式实现。即使您要使用退回电子邮件来确定电子邮件是否已成功发送,退回通常不会立即出现,有时可能需要数小时,这意味着您真的不应该尝试同步执行此操作(即,如果未收到电子邮件,则期望发送电子邮件的方法抛出异常)。
但是,根据您想要做的事情,您可以通过异步执行此操作来满足您的要求。例如,我与一个客户合作,该客户有一个邮件列表应用程序,如果电子邮件被退回,他们不需要立即处理。他们甚至不需要可靠地知道这一点(即,如果没有收到电子邮件,但它没有退回,他们不在乎)。他们只需要知道一封电子邮件是无效的,然后取消订阅。
此应用程序使用 LISTSERV。发送的电子邮件有一个自定义的、唯一的 Return-Path 标头。在收到来自特定收件人的 N 次退回邮件后,该电子邮件将自动取消订阅,并且与该收件人关联的所有数据库记录也将被清除。
我不确定是否有一种简单的方法可以在没有 LISTSERV 的情况下实现这一点,但您可能需要查看smtp2web。