1

Тема: Каким образом вычисляется token при отправки письма в сервисах Mail.ru

Нужно написать POST запрос для отправки письма через сервис Mail.ru. Насколько я понял, у них как-то хитро вычисляется token. Каким образом можно его получить?

2 (изменено: Malcev, 2016-03-03 23:55:57)

Re: Каким образом вычисляется token при отправки письма в сервисах Mail.ru

Обычным регексом вычисляется.
Смотрите: patron.updateToken.
Вот так отправляет на автохотки:

Login := "login"
Password := "password"
to := "to@test.ru"
subject := "test"
text := "text"

HttpObj := ComObjCreate("WinHttp.WinHttpRequest.5.1")
HttpObj.Open("POST", "https://auth.mail.ru/cgi-bin/auth?from=splash")
HttpObj.Send("Domain=mail.ru&Login=" Login "&Password=" Password "&new_auth_form=1&saveauth=1")
RegexMatch(HttpObj.ResponseText, "s)CurrentTimestamp:\s+'(.+?)'.+?\(patron, '(.+?)'.+?patron\.updateToken\(""(.+?)""", id)
HttpObj.Open("POST", "https://e.mail.ru/api/v1/messages/send")
r := ""
loop 32
{
   Random, a,0,9
   r .= a
}
HttpObj.Send("ajax_call=1&x-email=" login "@mail.ru&tarball=" id2 "&tab-time=" id1 "&email=" login "@mail.ru&htmlencoded=false&id=" r "&source={""draft"":"""",""reply"":"""",""forward"":""""}&template=&sign=0&remind=&receipt=false&subject=" subject "&priority=&capcha=&correspondents={""to"":""<" to ">"",""cc"":"""",""bcc"":""""}&attaches={""list"":[]}&body={""html"":""" text """}&api=1&token=" id3)
msgbox % HttpObj.ResponseText

Только надо ли заморачиваться, когда можно отправлять с помощью CDO.Message.

3

Re: Каким образом вычисляется token при отправки письма в сервисах Mail.ru

Malcev пишет:

"s)CurrentTimestamp:\s+'(.+?)'.+?\(patron, '(.+?)'.+?patron\.updateToken\(""(.+?)"""

А можно подробнее про эту строчку? Я не очень силен в регулярных выражения, к сожалению. Пишу программу на C++

4 (изменено: sema.tugrik, 2016-03-04 18:54:46)

Re: Каким образом вычисляется token при отправки письма в сервисах Mail.ru

Пробовал транслировать в Qt. Запрос на аутентификацию возвращает редирект, хотя куки я получаю

"<html><body>Redirect...</body></html>" 

5

Re: Каким образом вычисляется token при отправки письма в сервисах Mail.ru

С++ не знаю.
Алгоритм такой.
Логинимся. Парсим ответ.

RegexMatch(HttpObj.ResponseText, "s)CurrentTimestamp:\s+'(.+?)'.+?\(patron, '(.+?)'.+?patron\.updateToken\(""(.+?)""", id)

Cохраняем в переменную id1 текст между CurrentTimestamp: и кавычкой. (Он присутствует Post запросе, но можно и без него).
В id2 между patron и кавычкой. (Судя по названию имя у него меняется, поэтому лучше каждый раз считывать).
В id3 между patron.updateToken и кавычкой. (Token).
Плюс еще надо сгенерировать 32-символьный айди. У меня он в переменной r.

6

Re: Каким образом вычисляется token при отправки письма в сервисах Mail.ru

Спасибо! Буду разбираться!

7

Re: Каким образом вычисляется token при отправки письма в сервисах Mail.ru

Запрос на аутентификацию возвращает редирект

Можно отключить редирект.
https://msdn.microsoft.com/en-us/librar … 85%29.aspx

8

Re: Каким образом вычисляется token при отправки письма в сервисах Mail.ru

Malcev пишет:

С++ не знаю.
Алгоритм такой.
Логинимся. Парсим ответ.

RegexMatch(HttpObj.ResponseText, "s)CurrentTimestamp:\s+'(.+?)'.+?\(patron, '(.+?)'.+?patron\.updateToken\(""(.+?)""", id)

Cохраняем в переменную id1 текст между CurrentTimestamp: и кавычкой. (Он присутствует Post запросе, но можно и без него).
В id2 между patron и кавычкой. (Судя по названию имя у него меняется, поэтому лучше каждый раз считывать).
В id3 между patron.updateToken и кавычкой. (Token).
Плюс еще надо сгенерировать 32-символьный айди. У меня он в переменной r.

Добрый день! Как сгенерировать этот айди? Подскажите пжл

9 (изменено: Malcev, 2017-07-09 16:01:47)

Re: Каким образом вычисляется token при отправки письма в сервисах Mail.ru

Я его генерировал так:

r := ""
loop 32
{
   Random, a,0,9
   r .= a
}

https://ru.wikipedia.org/wiki/GUID

10

Re: Каким образом вычисляется token при отправки письма в сервисах Mail.ru

Malcev пишет:

Я его генерировал так:

r := ""
loop 32
{
   Random, a,0,9
   r .= a
}

https://ru.wikipedia.org/wiki/GUID

Получается что рэндомные 32 символа просто генерируются и все ?

11

Re: Каким образом вычисляется token при отправки письма в сервисах Mail.ru

Выходит, что так.

12

Re: Каким образом вычисляется token при отправки письма в сервисах Mail.ru

Вообще-то так:

CreateUUID()  {
   VarSetCapacity(UUID, 16, 0)
   DllCall("Rpcrt4\UuidCreate", Ptr, &UUID)

   DllCall("Rpcrt4\UuidToString", Ptr, &UUID, PtrP, pStr)
   Return Format("{:U}", StrGet(pStr))
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

13

Re: Каким образом вычисляется token при отправки письма в сервисах Mail.ru

Да, но еще нужно от дефисов избавиться и добавить в конец RpcStringFree.

14

Re: Каким образом вычисляется token при отправки письма в сервисах Mail.ru

А, точно, пропустил.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg