Тема: Каким образом вычисляется token при отправки письма в сервисах Mail.ru
Нужно написать POST запрос для отправки письма через сервис Mail.ru. Насколько я понял, у них как-то хитро вычисляется token. Каким образом можно его получить?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Серый форум → Общение → Прочие скриптовые технологии → Каким образом вычисляется token при отправки письма в сервисах Mail.ru
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Нужно написать POST запрос для отправки письма через сервис Mail.ru. Насколько я понял, у них как-то хитро вычисляется token. Каким образом можно его получить?
Обычным регексом вычисляется.
Смотрите: 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.
"s)CurrentTimestamp:\s+'(.+?)'.+?\(patron, '(.+?)'.+?patron\.updateToken\(""(.+?)"""
А можно подробнее про эту строчку? Я не очень силен в регулярных выражения, к сожалению. Пишу программу на C++
Пробовал транслировать в Qt. Запрос на аутентификацию возвращает редирект, хотя куки я получаю
"<html><body>Redirect...</body></html>"
С++ не знаю.
Алгоритм такой.
Логинимся. Парсим ответ.
RegexMatch(HttpObj.ResponseText, "s)CurrentTimestamp:\s+'(.+?)'.+?\(patron, '(.+?)'.+?patron\.updateToken\(""(.+?)""", id)
Cохраняем в переменную id1 текст между CurrentTimestamp: и кавычкой. (Он присутствует Post запросе, но можно и без него).
В id2 между patron и кавычкой. (Судя по названию имя у него меняется, поэтому лучше каждый раз считывать).
В id3 между patron.updateToken и кавычкой. (Token).
Плюс еще надо сгенерировать 32-символьный айди. У меня он в переменной r.
Спасибо! Буду разбираться!
Запрос на аутентификацию возвращает редирект
Можно отключить редирект.
https://msdn.microsoft.com/en-us/librar … 85%29.aspx
С++ не знаю.
Алгоритм такой.
Логинимся. Парсим ответ.RegexMatch(HttpObj.ResponseText, "s)CurrentTimestamp:\s+'(.+?)'.+?\(patron, '(.+?)'.+?patron\.updateToken\(""(.+?)""", id)
Cохраняем в переменную id1 текст между CurrentTimestamp: и кавычкой. (Он присутствует Post запросе, но можно и без него).
В id2 между patron и кавычкой. (Судя по названию имя у него меняется, поэтому лучше каждый раз считывать).
В id3 между patron.updateToken и кавычкой. (Token).
Плюс еще надо сгенерировать 32-символьный айди. У меня он в переменной r.
Добрый день! Как сгенерировать этот айди? Подскажите пжл
Я его генерировал так:
r := "" loop 32 { Random, a,0,9 r .= a }
Получается что рэндомные 32 символа просто генерируются и все ?
Выходит, что так.
Вообще-то так:
CreateUUID() {
VarSetCapacity(UUID, 16, 0)
DllCall("Rpcrt4\UuidCreate", Ptr, &UUID)
DllCall("Rpcrt4\UuidToString", Ptr, &UUID, PtrP, pStr)
Return Format("{:U}", StrGet(pStr))
}
Да, но еще нужно от дефисов избавиться и добавить в конец RpcStringFree.
А, точно, пропустил.
Пробую отправить на почту текст кодом из второго сообщения — но на почте лишь появляется предупреждение о входе с нового устройства в аккаунт. То есть, в «Login» и «Password» указываю данные от первого ящика с мэйла, а в «to» — второго. Что-то изменилось на сервере?
Есть ли возможность отправлять текст на какой-нибудь адрес в интернете — например, в существующий файл гугл-докс?
Есть ли возможность отправлять текст на какой-нибудь адрес в интернете
Разумеется. Automation, класс «CDO.Message».
А если без использования почты, куда-нибудь в репозиторий гитхаба текст отправить, или в другое место?
Аналогично, IE+DOM.
Хотя, полагаю, с репозиториями работать надо соответствующими тому средствами.
Имеется ли пример IE+DOM? Цель — наиболее просто отправлять текст в интернет и накапливать его там для последующей обработки.
Есть ли возможность отправлять текст на какой-нибудь адрес в интернете — например, в существующий файл гугл-докс?
Все автоматизируется через апи приложения либо через winhttprequest.
Вам ли это не знать...
Хотелось чего-нибудь из уже написанного.
Когда-то очень давно я игрался с CDO.Message чтобы иметь возможность отправлять письма из ком.строки. На тот момент получилось что-то работоспособное. Но потом я забросил. Воды утекло с тех времен достаточно, чтобы это перестало перестало работать или по-прежнему продолжало работать. У Вас есть возможность проверить это и (возможно) применить в деле.
Здесь анонс и какое-то обсуждение: http://forum.script-coding.com/viewtopic.php?id=7232
Ссылка на исходный код устарела. Вот свежая: https://github.com/ildar-shaimordanov/j … 32/Mail.js
А вообще-то надо поискать и почитать соответствующие API.
Вот для GMail точно нужно сделать предварительные настройки на сервере в настройках аккаунта.
Хотелось чего-нибудь из уже написанного.
Язык?
Вот для GMail точно нужно сделать предварительные настройки на сервере в настройках аккаунта
Необязательно.
http://forum.script-coding.com/viewtopic.php?id=15864
Конечно хорошо было бы поломать их бот-защиту, но не хватает знаний и времени. ((
Язык интересует AHK и без использования почты.
…и без использования почты.
Это как? Почта без почты?!
Тема конечно про почту, но просто предпочтителен вариант без неё.
Pastebin вроде подходит. Правда, при пользовании сайтом, у меня NOD пишет про вредоносный Urlik.AAR и блокирует это дело.
Нашёл примеры для оправки текста — https://www.autohotkey.com/boards/viewt … in#p182404.
Вот так работает. Интересно, можно отправлять пост по постоянному адресу, не создавая каждый раз новые?
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
}
Наверно можно, используя какую-либо библиотеку, первое, что попалось, на node.js.
Но кажется, всё равно там лимит присутствует на количество отправок. Поэтому проще всего вариант с ВК — можно отправлять без ограничений в личные сообщения:
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 (имея в виду, что тот, кому доступен токен, сможет в том числе читать переписку владельца токена).
А разве в личных сообщениях нет ограничения по длине?
Есть, но мне не актуально — важнее, чтобы ограничений на количество не было.
А так-то можно учитывать допустимую длину и отправлять частями.
Есть ли возможность отправлять текст на какой-нибудь адрес в интернете — например, в существующий файл гугл-докс?
Я писал 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
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться