我们正在构建一个有效的电子邮件/日历/联系客户端系统。
用户将向我们提供他们的电子邮件地址密码(或其他身份验证,例如oauth),我们将连接到他们的底层电子邮件系统。
“底层系统”包括:
这些系统中的每一个都在其API中具有微妙(而不是那么微妙)的差异,尤其是访问日历和联系数据。因此,我们需要知道用户正在使用的提供商。
但我们宁愿不要问用户。我们想自动解决(并且至少减少选择)。
我已经四处查找已经实现此功能但尚未发现任何内容的内容。我知道这主要是可能的,因为Windows Phone做得很好(只需输入用户名/ pw,它就做对了)。
在我潜入并开始自己写作之前,我想确保如果某人已经以一种出色的方式完成它,我就不会浪费时间。
知道这样的事吗?对于这个项目,更喜欢C#/。NET。
[编辑:增加潜在的算法]
[编辑:5/18] 我构建了一个使用不需要auth的方法的原型(例如,只需要MX / SMTP sluthing)。试一试:http://bit.ly/KLZKxD
答案 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均使用此功能。