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