пароль код авторизации smtp
OAuth-авторизация в Яндекс.Почте
Почтовые клиенты и приложения могут получать доступ к ящикам Яндекс.Почты по протоколу OAuth. Этот протокол позволяет программам не запрашивать и не хранить логины и пароли, а пользователям — не беспокоиться о безопасности паролей.
Подключение
Чтобы реализовать OAuth-авторизацию в своем почтовом клиенте:
Зарегистрируйте приложение на Яндекс.OAuth со следующими правами:
для авторизации на SMTP-сервере — Яндекс.Почта → Отправка писем через Яндекс.Почту по протоколу SMTP ;
Реализуйте запрос OAuth-токенов любым доступным способом (см. документацию Яндекс.OAuth). Для первоначального тестирования можно использовать отладочный токен.
Организуйте отправку OAuth-токенов в Яндекс.Почту и обработку ответа сервера. Ниже описано корректное взаимодействие с серверами Яндекс.Почты по протоколам IMAP и SMTP.
Адреса почтовых серверов
Обращаться к почтовым серверам следует по следующим адресам:
Взаимодействие с IMAP-сервером
Чтобы составить аргумент с авторизационными данными:
Подготовьте строку с данными:
Закодируйте полученную строку методом base64, например:
Команда AUTHENTICATE должна быть оформлена как одна строка, без разрывов и переносов (пример ниже отформатирован для удобства чтения). Последовательность запросов и ответов при успешной IMAP-авторизации может выглядеть так:
Ответ об ошибке авторизации
Взаимодействие с SMTP-сервером
Аргумент с авторизационными данными составляется так же, как и для протокола IMAP:
Подготовьте строку с данными:
Закодируйте полученную строку методом base64, например:
Последовательность запросов и ответов при успешной SMTP-авторизации выглядит так:
Команда AUTH должна быть оформлена как одна строка, без переносов (пример отформатирован для удобства чтения).
Ответ об ошибке авторизации
Пример последовательности запросов и ответов при ошибке SMTP-авторизации:
Если авторизационная строка была составлена неверно, ошибка будет такой:
Отправка по SMTP с авторизацией
1. Введение.
Практически каждый, кто сталкивается с работой в инете на низком уровне при создании какой-либо почтовой программы, оповещалки, либо троя или кейлогера, напарывается на такой неприятный облом, как авторизация. Ведь многие SMTP-серверы не дают пользователю нормально отправить письмо, а требуют какие-то логин и пароль.
В этой статье я попытаюсь раскрыть эту проблему, простыми словами написать то, что написано в более «расплывчатом» виде в rfc, который почему-то всем лень читать. И, конечно, данная статья будет ориентирована на «низкоуровневых» программистов. Я буду писать под фасм, но думаю, что для Вас не составит особого труда переделать примеры под более удобный для Вас компилятор.
2. SMTP. Теория
Итак, теперь кратко, что такое SMTP — Simple Mail Transfer Protocol. Задача протокола — это удобная передача электронной почты. Но если не делать отступлений и не вдаваться в подробности, то это просто некоторое количество команд и «спецсимволов», позволяющих отправлять письма. Для того, чтоб собственноручно пообщаться с сервером, можно взять обычный телнет (Пуск-Выполнить-telnet) и зайти на 25 порт сервера.
Далее следует начать работу с сервером, а для этого его надо поприветствовать. так как сервер нормальных слов не понимает, сделать это надо командой EHLO someword[CRLF].
[CRLF]=Enter=13,10 (каждая команда завершается этой последовательностью байт). После утвердительного ответа можно приступать непосредственно к отправке писем.
Задать отправителя письма можно командой MAIL FROM: [CRLF], а получателя RCPT TO: [CRLF].
После того как эти параметры заданы, можно приступать к написанию письма. Для этого надо послать команду DATA[CRLF]. Теперь то можно набрать тело письма. Чтоб завершить письмо, следует отправить последовательность вида [CRLF].[CRLF] на сервер. Если все пройдёт удачно, то письмо будет отправлено адресату. Завершить работу с сервером следует командой QUIT[CRLF].
Так просто было общаться с сервером не слишком долгое время. Теперь, прежде чем отправить письмо, следует авторизироваться. Есть несколько способов авторизации, но я опишу самый простой, который поддерживается большинством SMTP-серверов. Чтоб начать авторизацию, следует послать на сервер команду AUTH LOGIN[CRLF], но прежде убедитесь, что данный сервер поддерживает эту команду.
В случае принятия команды сервер запросит у Вас логин и пароль (запросы будут зашифрованы в Base64). следовательно логин и пароль надо отправлять, предварительно зашифровав их в Base64. При удачной аутентификации будет выведено соответствующее сообщение. После этого Вы можете задать адрес отправителя (должен быть привязан к логину), получателя и отправить письмо.
Но лучше раз увидеть, чем 100 раз услышать, поэтому я приведу пример диалога с сервером (s — server, u — user):
3. SMTP. Практика.
Приступим непосредственно к практике. Напишем небольшую программку, которая будет посылать небольшое сообщение на заданный почтовый ящик с авторизацией. Я предполагаю, что Вы уже знакомы с WinSocks, и не буду на этом останавливаться. Вы можете скачать полную версию программы, а я разъясню только ключевые моменты. А именно работу процедуры Send_Mail
proc Send_Mail pszmess,pszfrom,pszto,pszlog,pszpass,pszserv,pszsubj
pszMess — само сообщение.
pszfrom — адрес отправителя
pszto — адрес получателя
pszlog, szpass — логин и пароль для авторизации
pszserv — сервер
pszsubj — тема письма
Тут шифруется логин и пароль в Base64, используется алгоритм by RT Fishel без использования алфавита. Далее идёт работа с WinSocks
Тут в качестве параметра gethostbyname передаётся указатель на строку с именем сервера, а потом из структуры hostent извлекается sin_addr.
Коннект на 25 порт, только нужно учитывать порядок байт.
После коннекта прочитаем ответ сервера.
Следует отметить, что все ответы сервера начинаются с определенного кода. Несложно увидеть, что в случае успеха код начинается либо с цифры 2, либо с 3. На этом основана проверка ошибок в процедуре get_data.
Теперь немного о вспомогательных процедурах:
sendNrecv — передаёт строку, указатель на которую следует поместить в еах, на сервер, получает ответ сервера.
Send_String — просто передает строку, адрес которой передан как параметр, на сервер.
Я не считаю, что следует рассматривать работу каждой из них, если Вы знакомы с WinSocks, то без проблем сделаете это сами.
Отсылка логина и пароля на сервер. szEnd+3 — указатель на [CRLF]. Получается, что мы передаем строку, а после этого [CRLF] и читаем ответ. Далее все по порядку, описанному в начале статьи.
Программа отсылает строки примерно таким образом:
sЧтоб передать файл, нужно в теле сообщения создать заголовок вида
После чего просто передать файл, зашифрованный в Base64.
4. Заключение
Думаю, что эта статья хоть кому-нибудь пригодится. Или хотя бы облегчит жизнь, так как готовой информации для «низкоуровнего» программиста достаточно мало, а искать в интернете крохи информации и исходники, а потом в них разбираться порой нет времени, а иногда и желания.