Мы создаем систему, которая, по сути, является клиентом электронной почты/календаря/контактов.
Пользователи предоставят нам пароль своего адреса электронной почты (или другую аутентификацию, например oauth), и мы подключимся к их базовой системе электронной почты.
«базовые системы» включают:
- Microsoft Exchange / Office365
- Gmail
- Почта Яху
- Электронная почта Apple
- Общий IMAP
Каждая из этих систем имеет тонкие (и не очень) различия в своих API, особенно для доступа к данным календаря и контактов. Таким образом, нам нужно знать, какого провайдера использует пользователь.
Но мы бы предпочли не СПРАШИВАТЬ пользователя. Мы хотели бы понять это (и, по крайней мере, уменьшить выбор) автоматически.
Я искал что-то, что уже реализует это, но ничего не нашел. Я знаю, что в основном это возможно, потому что Windows Phone делает это довольно хорошо (просто введите имя пользователя/пароль, и он сделает все правильно).
Прежде чем я окунусь и начну писать свой собственный, я хочу убедиться, что не трачу свое время впустую, если кто-то уже сделал это превосходно.
Знаете что-нибудь подобное? Для этого проекта предпочитайте C#/.NET.
[EDIT: добавление потенциального алгоритма]
Возможный алгоритм:
- Given email address & password
- Extract domain name from email address
- Попробуйте автообнаружение Exchange. Если успешно сделано.
- Use DNS MX records to find smtp host.
- Do SMTP EHLO
- Gmail responds with "250-mx.google.com at your service"
- So if we see a "google.com" we are done.
- Yahoo responds with 250-mta1257.mail.sk1.yahoo.com
- So if we see a "yahoo.com" in the response we are done.
- Apple responds with 250-xxxxxx-mac.com
- So if we see a "mac.com" in the response we are done.
- If none of the above
- IMAP?
- ...
- IMAP?
[EDIT: 5/18] Я создал прототип, в котором используются методы, не требующие аутентификации (например, просто отслеживание MX/SMTP). Попробуйте: http://bit.ly/KLZKxD