Можно ли определить базового поставщика услуг электронной почты по адресу электронной почты?

Мы создаем систему, которая, по сути, является клиентом электронной почты/календаря/контактов.

Пользователи предоставят нам пароль своего адреса электронной почты (или другую аутентификацию, например 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?
          • ...

[EDIT: 5/18] Я создал прототип, в котором используются методы, не требующие аутентификации (например, просто отслеживание MX/SMTP). Попробуйте: http://bit.ly/KLZKxD


person tig    schedule 30.04.2012    source источник


Ответы (4)


Алгоритм кажется разумным. Вы получите наилучшие результаты, работая с нефильтрованного сервера (это означает, что он имеет прямой исходящий SMTP / не работает через прокси). При работе с клиента (мобильного/планшета/настольного компьютера) никаких гарантий нет, поскольку некоторые интернет-провайдеры передают SMTP через прокси-ретранслятор, поэтому ответ EHLO предназначен только для прокси-сервера.

Возможно, вы захотите выполнить проверку портов для серверов, чтобы проверить ожидаемую поддержку протокола (может быть достаточно только соединения TCP, но предпочтительнее квитирование протокола). Кроме того, лучше всего создать базу данных проверенных сопоставлений серверов SMTP и IMAP, поскольку могут быть разделенные имена (например, smtp.domain.com и mail.domain.com). означает сервер календаря/контактов, не так много (кроме Exchange, но только если автообнаружение настроено правильно).

Если вы можете заставить своих пользователей одобрить и предполагая, что у вас есть их имя пользователя/пароль, вы можете попробовать подключиться к SMTP через запись MX и отправить электронное письмо на свой собственный адрес, а затем проверить заголовки на наличие полезной информации о сервере (необходимо пройти аутентификацию ретранслировать). В качестве альтернативы пользователи могут ответить на созданное вами электронное письмо, чтобы получить ту же информацию о сервере.

Также убедитесь, что вы делаете свой собственный DNS-запрос и пробуете каждую запись MX или все первичные — если основной MX не работает или DNS плохо настроен для равного взвешивания, вы можете в конечном итоге попасть на смарт-хост / резервную копию, которая может быть просто тупым SMTP. реле/хранение-и-пересылка и не дать вам правильный ответ.

TL;DR: нет быстрого решения, но должен работать каскадный алгоритм, который пытается и терпит неудачу с разными решениями, пока одно не сработает/не даст ожидаемый результат.

person Simon    schedule 01.05.2012

Большинство устройств могут автоматически обнаруживать службу, анализируя весь адрес электронной почты. [email protected], очевидно, будет учетной записью Gmail. Так что для Apple, Gmail, Yahoo, Live, Hotmail и т. д. вы можете легко программировать. Для других доменов, в том числе пользовательских, вы можете попробовать следующее: http://www.exclamationsoft.com/exclamationsoft/netmailbot/help/website/HowToFindTheSMTPMailServerForAnEmailAddress.html

person Johnathon Scionwest    schedule 30.04.2012

Вы можете обнаружить учетные записи Google Apps для вашего домена, изучив записи MX домена. Если основной записью MX является ASPMX.L.GOOGLE.com, то это GMail.

person Danga    schedule 01.05.2012

Я создал реализацию этого, которая широко использовалась с некоторым успехом: https://github.com/tig/Email2Calendar

Это используется как milelogr.com, так и freebusy.io.

person tig    schedule 14.12.2019