1

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

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

“基础系统”包括:

  • 微软交换/Office365
  • 邮件
  • 雅虎邮箱
  • 苹果电子邮件
  • 通用 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”,我们就完成了。
      • 如果以上都不是
        • 地图?
          • ...

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

4

4 回答 4

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:没有快速的解决方案,而是一种级联算法尝试并失败不同的解决方案,直到一个工作/给出预期结果应该工作。

于 2012-05-01T10:10:43.353 回答
0

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

于 2012-04-30T22:55:01.883 回答
0

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

于 2012-05-01T14:48:06.617 回答
0

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

这由milelogr.com 和freebusy.io 使用。

于 2019-12-14T20:46:59.090 回答