【问题标题】:check email existence using Delphi with Indy or any other components/tools for Delphi使用带有 Indy 的 Delphi 或 Delphi 的任何其他组件/工具检查电子邮件是否存在
【发布时间】:2011-03-28 16:01:42
【问题描述】:

我需要检查电子邮件帐户是否存在,我需要使用 Delphi 和 Indy 进行检查(如果可能)

我有一个用于 ERP 系统的 Windows 数据库,我需要确保客户在系统中输入有效的电子邮件,以便我可以将他们要求的报价发送给我的客户。

我尝试使用发送命令 HELO、MAIL 和 RCPT 在 yahoo 和 google 上进行测试,但没有成功。

【问题讨论】:

  • 您可能无法在任何设置良好的邮件服务器中获得所需的结果。这种技术可用于收集真实的邮件地址,并将其用于垃圾邮件或更糟的情况。某些服务器不会告诉您地址是否存在,但您的邮件可能会发送到 /dev/null,而您的 IP 可能会被检测到不良行为的 IDS 阻止。保持礼貌,避免表现得像垃圾邮件发送者......
  • -1 因为没有“关闭商城软件”。如果这看起来很苛刻,我很抱歉,但老实说,我的邮箱中有大约 2000 封未读电子邮件,因为我们公司的垃圾邮件过滤器停止工作并且没有人修复它。大概两个月2000。既然你要收集电子邮件地址,那就选择更简单的目标:如果我是雅虎或谷歌,我会雇佣最聪明的人来对抗那些试图做你正在做的事情的人。我的猜测是,最聪明的人正在与你作战。
  • @WMAN 他不是说你是垃圾邮件发送者。他是说,以特定方式被探测的邮件服务器可能会做出反应,就好像探测者是垃圾邮件发送者一样。因此,如果您编写的代码具有与垃圾邮件发送者相同的行为特征,那么您的 IP 地址可能会遇到麻烦。他的评论包含了很好的建议,只要你能认出来。
  • @WMAN,绝对没有办法安全地测试电子邮件地址。由于大量的垃圾邮件四处游荡,每个人都对它更加敏感。在 RFC 的规范中工作是不够的:向 yahoo 发送一些不良电子邮件(向不存在的地址发送电子邮件),您可能会被列入黑名单。对更多域(包括 google)执行此操作,您可能会发现自己进入了由数百个不同邮件服务器检查的全球黑名单。这真是一个糟糕的情况,你无法逃脱。
  • @WMAN,你必须做其他人都在做的事情:当你注册一个新的电子邮件地址时,发送一封确认电子邮件。您不想通过电子邮件“获得创意”,您的创意肯定会被误解。由于您提供了扫描这些电子邮件地址的合理理由,因此我将删除我的反对票。

标签: delphi indy


【解决方案1】:

邮件服务器必须保护自己免受垃圾邮件发送者和其他恶意攻击。他们不会轻易放弃他们的秘密。将邮件服务器配置为发送给不存在的收件人的黑洞消息是很常见的。他们不会回复发件人说:“对不起,该用户不存在,请重试。”

因此,如果您想验证电子邮件地址是否有人支持,我认为唯一确定的方法是发送一封请求回复的电子邮件。

【讨论】:

  • +1 我会说有人希望你错了,但这只是一厢情愿。
  • +1,可能有人会喜欢 VRFY 命令……但大多数人很久以前就禁用了它,它是为不同的 Internet 设计的。
【解决方案2】:

您必须要求您的客户确认他们的电子邮件地址,即输入两次以减少拼写错误,要求注册并发送激活链接等等。明确说明他们需要一个有效的电子邮件地址:如果他们问你一个报价,他们为什么要输入一个无效的地址?但请注意,有些人可能会使用一次性电子邮件地址来保护他们的真实地址。

您无法通过询问服务器来检查地址是否真的存在。由于垃圾邮件发送者使用大量垃圾邮件和技术来收集和清理其地址列表,因此大多数服务器都设置为保护自己。

这就是为什么我建议“有礼貌”。很抱歉,如果您弄错了,我只是告诉您,如果您的应用程序显示“类似垃圾邮件”的行为(并且您以前版本的问题对您的目标更不清楚),它可能会导致您的 IP被列入黑名单。那么您在向客户发送报价时可能会遇到更多麻烦。

【讨论】:

    【解决方案3】:

    您可以尝试ICS components,这是一个带有很好示例的开源库(请参阅 SMTPClient)。 因此,此库或其他库不会告诉您电子邮件帐户是否存在,因为它取决于主机回答有关不存在帐户的命令的方式。 在 ICS 中,发送命令后,您可能需要管理事件:SmtpRequestDone(Sender: TObject; RqType: TSmtpRequest;ErrorCode: Word);
    其中 ErrorCode 是错误代码(即 550)。

    【讨论】:

    • 我发现如果服务器重放代码 550 则电子邮件不存在
    • 是的,但是如果邮件地址不是本地托管在服务器上,某些 SMTP 服务器不会回复 550,以避免将信息发送到随机地址大量邮寄垃圾邮件。
    • 那么还有其他方法吗?我只是想确保客户输入了有效的电子邮件,并且我已经检查了格式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 2019-08-25
    相关资源
    最近更新 更多