底层电子邮件提供商可以通过电子邮件地址确定吗?

时间:2012-04-30 21:55:30

标签: email calendar email-validation email-client

我们正在构建一个有效的电子邮件/日历/联系客户端系统。

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

“底层系统”包括:

  • Microsoft Exchange / Office365
  • 的GMail
  • Yahoo Mail
  • Apple电子邮件
  • 通用IMAP

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

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

我已经四处查找已经实现此功能但尚未发现任何内容的内容。我知道这主要是可能的,因为Windows Phone做得很好(只需输入用户名/ pw,它就做对了)。

在我潜入并开始自己写作之前,我想确保如果某人已经以一种出色的方式完成它,我就不会浪费时间。

知道这样的事吗?对于这个项目,更喜欢C#/。NET。

[编辑:增加潜在的算法]

潜在算法:

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

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

4 个答案:

答案 0 :(得分: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:没有快速的解决方案,但是一个级联的算法可以尝试和失败不同的解决方案直到一个工作/给出预期的结果。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

milelogr.com和freebusy.io均使用此功能。