【问题标题】:Can the underlying email provider be determined from an email address?可以从电子邮件地址确定基础电子邮件提供商吗?
【发布时间】:2012-04-30 21:55:30
【问题描述】:

我们正在构建一个系统,它实际上是一个电子邮件/日历/联系人客户端。

用户将向我们提供他们的电子邮件地址密码(或其他身份验证,例如 oauth),我们将连接到他们的底层电子邮件系统。

“底层系统”包括:

  • Microsoft Exchange / Office365
  • GMail
  • 雅虎邮箱
  • Apple 电子邮件
  • 通用 IMAP

这些系统中的每一个都在其 API 中存在细微(而不是那么细微)的差异,尤其是在访问日历和联系人数据方面。因此我们需要知道用户正在使用哪个提供者。

但我们宁愿不问用户。我们想自动解决(并且至少减少选择)。

我四处寻找已经实现此功能但没有找到任何东西的东西。我知道这很可能是因为 Windows Phone 做得很好(只需输入用户名/密码,它就会做正确的事情)。

在我开始自己写之前,我想确保如果有人已经以出色的方式完成它,我不会浪费我的时间。

知道这样的事情吗?对于这个项目,首选 C#/.NET。

[编辑:添加潜在算法]

潜在算法:

  • 给定电子邮件地址和密码
    • 从电子邮件地址中提取域名
    • 尝试 Exchange 自动发现。如果成功完成。
    • 使用 DNS MX 记录查找 smtp 主机。
      • 执行 SMTP EHLO
      • Gmail 回复“250-mx.google.com 随时为您服务”
        • 因此,如果我们看到“google.com”,我们就完成了。
      • 雅虎回复 250-mta1257.mail.sk1.yahoo.com
        • 因此,如果我们在响应中看到“yahoo.com”,我们就完成了。
      • Apple 回复 250-xxxxxx-mac.com
        • 因此,如果我们在响应中看到“mac.com”,我们就完成了。
      • 如果以上都不是
        • IMAP?
          • ...

[编辑:5/18] 我构建了一个原型,它使用不需要身份验证的方法(例如,只是 MX/SMTP sluthing)。试试看:http://bit.ly/KLZKxD

【问题讨论】:

    标签: email calendar email-validation email-client


    【解决方案1】:

    算法似乎是合理的。您将从未经过滤的服务器运行获得最佳结果(这意味着它具有直接的 SMTP 出站/不通过代理运行)。如果从客户端(移动/平板电脑/桌面)运行,则无法保证,因为某些 ISP 通过代理中继传递 SMTP,因此 EHLO 响应仅用于代理。

    您可能希望对服务器进行端口检查以验证预期的协议支持(仅 TCP 连接可能就足够了,但协议握手更可取)。此外,最好建立一个经过验证的 SMTP 和 IMAP 服务器映射的数据库,因为可能存在拆分名称(例如 smtp.domain.com 和 mail.domain.com) - 发现 SMTP 很容易,发现出站服务器通常也指日历/联系人服务器,而不是太多(Exchange 除外,但前提是自动发现配置正确)。

    如果您可以让您的用户批准并假设您有他们的用户名/密码,您可以尝试通过 MX 记录连接到 SMTP 并将电子邮件发送回您自己的地址,然后检查标头以获取有关服务器的有用信息(需要进行身份验证以中继)。用户也可以回复您生成的电子邮件以获得相同的服务器信息。

    同时确保您进行自己的 DNS 查询并尝试每条 MX 记录或所有主记录 - 如果主体 MX 已关闭或 DNS 配置不当以实现同等权重,您最终可能会遇到智能主机/备份,这可能只是一个愚蠢的 SMTP 中继/存储和转发,并没有给你正确的响应。

    TL;DR:没有快速的解决方案,但一种级联算法尝试并失败不同的解决方案,直到一个工作/给出预期结果应该工作。

    【讨论】:

      【解决方案2】:

      大多数设备可以通过解析整个电子邮件地址来自动检测服务。 Xyz@gmail.com 显然是一个 gmail 帐户。因此,对于 Apple、Gmail、Yahoo、Live、Hotmail 等,您可以轻松编程。 对于其他域,包括自定义,你可以试试这个:http://www.exclamationsoft.com/exclamationsoft/netmailbot/help/website/HowToFindTheSMTPMailServerForAnEmailAddress.html

      【讨论】:

        【解决方案3】:

        您可以通过检查域的 MX 记录来检测 Google Apps For Your Domain 帐户。如果主 MX 记录是 ASPMX.L.GOOGLE.com,那么它就是 GMail。

        【讨论】:

          【解决方案4】:

          我创建了一个已被广泛使用并取得了一些成功的实现:https://github.com/tig/Email2Calendar

          milelogr.com 和 freebusy.io 都使用它。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-03-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-04-12
            • 2012-11-15
            相关资源
            最近更新 更多