确定电子邮件是否能成功发送

3
我正在使用C#编写一个邮件应用程序,基本上需要确定哪些收件人成功接收了消息,哪些没有,无论失败的原因是什么。
总之,我希望在电子邮件地址不存在时抛出异常。然而,SmtpClient.Send在这种情况下不会抛出异常,所以我可能需要监视投递失败的回复并解析它们。
我知道这不是一项简单的任务,所以我想请教一下专家如何处理电子邮件发送的主要问题。
提前感谢!
3个回答

5
除非你使用带有哈希跟踪或类似功能的图像,否则出于安全原因,我认为你将无法进行追踪。很多邮件客户端也不会自动下载图片。
想象一下,如果垃圾邮件发送者可以可靠地确定他们的电子邮件中哪些被接收了?
你可以尝试ping服务器...例如gmail.com,但我也不知道这是否可靠。

这确实是唯一的方法(带有图片)。构建电子邮件,以便在图像未加载时很难阅读。这会让收件人感到烦恼,但如果您真的需要它,它可以完成工作。 - colithium
1
@colithium 您是正确的,但我不建议您的解决方案。 - alex
我发现一些电子邮件营销公司有一些类似的功能,比如“打开和点击跟踪”。我想知道他们是否使用这种哈希机制来进行跟踪(这确实是一个好主意 - 我个人以前没有想过)。 - Felipe Lima
我知道有一种大规模的邮件群发程序可以做到这一点——解析电子邮件中的链接,为每个链接创建一个随机哈希并将其插入数据库。然后,这些链接就会变成yoursite.com/link?ab27dbd9s0s89或类似的形式。当请求到来时,它会更新哈希对应的数据库(映射到一个电子邮件地址),然后只需向请求的链接发送位置标头即可。 - alex

4

你无法可靠地检测到这一点。这是SMTP协议的本质。是否告诉您电子邮件已被传递完全由接收方SMTP服务器决定。


0

您的具体请求无法以高效的方式实现。即使您使用回邮件来确定电子邮件是否成功发送,回邮件通常不会立即到达,有时可能需要几个小时,这意味着您真的不应该尝试同步执行此操作(即,如果未收到电子邮件,则期望发送电子邮件的方法抛出异常)。

根据您想要做什么,您可能可以通过异步执行此操作来满足您的要求。例如,我曾与一位客户合作,他们拥有一个邮件列表应用程序,在其中,如果电子邮件反弹,则无需立即处理。他们甚至不需要可靠地知道这一点(即,如果未收到电子邮件但没有反弹,他们并不关心)。他们只需要知道电子邮件无效,并将其取消订阅。

此应用程序使用 LISTSERV。发送的电子邮件具有自定义的唯一 Return-Path 标头。在从特定收件人处接收到 N 个退信后,将自动取消订阅该电子邮件,并清理与该收件人相关联的任何数据库记录。

我不确定是否有一种容易的方法可以在没有 LISTSERV 的情况下实现这一点,但您可能需要研究一下 smtp2web


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