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
Telegram jollycoder

13

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

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

14

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

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

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

15

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

Пробую отправить на почту текст кодом из второго сообщения — но на почте лишь появляется предупреждение о входе с нового устройства в аккаунт. То есть, в «Login» и «Password» указываю данные от первого ящика с мэйла, а в «to» — второго. Что-то изменилось на сервере?

Есть ли возможность отправлять текст на какой-нибудь адрес в интернете — например, в существующий файл гугл-докс?

16 (изменено: alexii, 2021-01-07 14:41:19)

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

DD пишет:

Есть ли возможность отправлять текст на какой-нибудь адрес в интернете

Разумеется. Automation, класс «CDO.Message».

17

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

А если без использования почты, куда-нибудь в репозиторий гитхаба текст отправить, или в другое место?

18 (изменено: alexii, 2021-01-07 21:13:08)

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

Аналогично, IE+DOM.

Хотя, полагаю, с репозиториями работать надо соответствующими тому средствами.

19

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

Имеется ли пример IE+DOM? Цель — наиболее просто отправлять текст в интернет и накапливать его там для последующей обработки.

20

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

DD пишет:

Есть ли возможность отправлять текст на какой-нибудь адрес в интернете — например, в существующий файл гугл-докс?

Все автоматизируется через апи приложения либо через winhttprequest.
Вам ли это не знать...

21

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

Хотелось чего-нибудь из уже написанного.

22 (изменено: Rumata, 2021-01-08 03:47:31)

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

Когда-то очень давно я игрался с CDO.Message чтобы иметь возможность отправлять письма из ком.строки. На тот момент получилось что-то работоспособное. Но потом я забросил. Воды утекло с тех времен достаточно, чтобы это перестало перестало работать или по-прежнему продолжало работать. У Вас есть возможность проверить это и (возможно) применить в деле.

Здесь анонс и какое-то обсуждение: http://forum.script-coding.com/viewtopic.php?id=7232
Ссылка на исходный код устарела. Вот свежая: https://github.com/ildar-shaimordanov/j … 32/Mail.js

А вообще-то надо поискать и почитать соответствующие API.

( 2 * b ) || ! ( 2 * b )
+ DD

23 (изменено: alexii, 2021-01-08 08:35:16)

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

Вот для GMail точно нужно сделать предварительные настройки на сервере в настройках аккаунта.

DD пишет:

Хотелось чего-нибудь из уже написанного.

Язык?

24 (изменено: Malcev, 2021-01-08 10:10:11)

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

alexii пишет:

Вот для GMail точно нужно сделать предварительные настройки на сервере в настройках аккаунта

Необязательно.
http://forum.script-coding.com/viewtopic.php?id=15864
Конечно хорошо было бы поломать их бот-защиту, но не хватает знаний и времени. ((

25

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

Язык интересует AHK и без использования почты.

26

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

DD пишет:

…и без использования почты.

Это как? Почта без почты?!

27

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

По-моему, легче всего организовать автоматическую отправку на pastebin.com, там api довольно простое.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder
+ DD

28

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

Тема конечно про почту, но просто предпочтителен вариант без неё.

29 (изменено: DD, 2021-01-08 21:18:38)

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

Pastebin вроде подходит. Правда, при пользовании сайтом, у меня NOD пишет про вредоносный Urlik.AAR и блокирует это дело.

Нашёл примеры для оправки текста — https://www.autohotkey.com/boards/viewt … in#p182404.

30 (изменено: DD, 2021-01-09 00:41:36)

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

Вот так работает. Интересно, можно отправлять пост по постоянному адресу, не создавая каждый раз новые?


api_dev_key := "Ваш_Api_Dev_Key. После регистрации - брать по адресу - https://pastebin.com/doc_api#1"

param := "api_dev_key=" api_dev_key "&api_paste_code=" a_now "&api_paste_private=1&api_paste_name=mypaste.txt&api_paste_expire_date=N&api_option=paste&api_user_name=&api_user_password=&api_user_key="
str := "https://pastebin.com/api/api_post.php"

url_tovar := url_tovar(str, param)
InputBox, qqq, pastebin, , , 600,150, , , , ,%url_tovar%

url_tovar(URL, param) { 
    WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
    WebRequest.Open("POST", URL)
	WebRequest.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
    WebRequest.Send(param)
    res := WebRequest.ResponseText
    return res
}

31

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

Наверно можно, используя какую-либо библиотеку, первое, что попалось, на node.js.

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

32 (изменено: DD, 2021-01-09 02:57:50)

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

Но кажется, всё равно там лимит присутствует на количество отправок. Поэтому проще всего вариант с ВК — можно отправлять без ограничений в личные сообщения:

https://api.vk.com/method/messages.send?v=5.92&message=%message%&user_id=%user_id%&access_token=%token%&random_id=%random_id%

Токен брать из официального приложения Kate Mobile (имея в виду, что тот, кому доступен токен, сможет в том числе читать переписку владельца токена).

33

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

А разве в личных сообщениях нет ограничения по длине?

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

34

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

Есть, но мне не актуально — важнее, чтобы ограничений на количество не было.

35

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

А так-то можно учитывать допустимую длину и отправлять частями.

36 (изменено: svoboden, 2021-01-24 19:51:26)

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

DD пишет:

Есть ли возможность отправлять текст на какой-нибудь адрес в интернете — например, в существующий файл гугл-докс?

Я писал vbs скрипт такой. Есть вариант на ahk. Конечно, нужно свое приложение создавать. Пример на vbs, который посылает SerialNumber компьютера отдельной строкой в txt файл в гугл диск:

 On Error Resume Next
 Dim strJson

 dim fso: Set fso = WScript.CreateObject("Scripting.FileSystemObject")
 dim oShell: Set oShell = CreateObject("WScript.Shell")
 Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")

 sUrl = "https://accounts.google.com/o/oauth2/token"
  sRequest = "refresh_token=1//0cDiJRIgO-H-ICgYIARAAGAwSNwF-L9IrYNFVsN72oqO-WBIPT2FGZDemRTxDXU&client_id=51371582-5ncn9n03t8antakj32hheqpf74q4mg0d.apps.googleusercontent.com&client_secret=Vll3gaxJRGNaj&grant_type=refresh_token"

 HTTPPost sUrl, sRequest

Function HTTPPost(sUrl, sRequest)
  dim oHTTP: set oHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
  oHTTP.open "POST", sUrl, true
  oHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  oHTTP.setRequestHeader "Content-Length", Len(sRequest)
  oHTTP.send sRequest
  oHTTP.waitForResponse
  strJson = oHTTP.responseText
  Set j = ParseJson(strJson)
  Result = j.access_token
  nVar = "Bearer "" " + Result

  If Err.Number <> 0 Then
  WScript.Echo Err.Number & ": " & Err.Description
  WScript.Quit
  End If
  For Each objObject In objService.ExecQuery("Select * from Win32_OperatingSystem")
  key = objObject.SerialNumber
  Next

  sR = "{""requests"":[{""insertText"":{""text"":""" & key & "\n"",""location"":{""index"":1}}}]}"

  oHTTP.open "POST", "https://content-docs.googleapis.com/v1/documents/1Nnz-z-28q_thEyggrtgN8nb79PIhWx1E:batchUpdate?alt=json&key=AIzaSyBaZYhFVmgreLYdlmu04Ew", true
  oHTTP.SetRequestHeader "Authorization", nVar
  oHTTP.setRequestHeader "Content-Type", "application/json"
  oHTTP.setRequestHeader "Content-Length", Len(sR)
  oHTTP.send sR
  oHTTP.waitForResponse
 End Function

Function ParseJson(strJson)
    dim html: Set html = CreateObject("htmlfile")
    Set window = html.parentWindow
    window.execScript "var json = " & strJson, "JScript"
    Set ParseJson = window.json
End Function