Ну,если не гуглится,то найди на серверных языках и глянь как там.Сделай по аналогии.Имхо сокеты,пост запросы и сериализация нужны тут).
держи функцию. возвращает либо "bad", либо loginass сделана правда через жопу лижбы работала, но работает прокоментировать чтото несмог, потомучто уже и непомню как это работает Code: function mailregmail: string; var mailid,mname,mvalue,mailpas,maillog:string; mailpost,mailget,mailtmp:tstringlist; maili:integer; begin try try result:=''; while (length(result)<4) do begin popmail:=0; cook.CookieCollection.Clear; mailget:=tstringlist.Create; mailpost:=tstringlist.Create; mailtmp:=tstringlist.Create; showmessage('['+TimeToStr(Time)+'] '+p+'Регистрирую почту на mail.ru..'); try mailget.text:=http.Get('http://win.mail.ru/cgi-bin/signup'); except end; for maili:=0 to mailget.Count-1 do begin if pos('<input type="hidden" name="', mailget[maili])<>0 then begin mname:=''; mname:=copy(mailget[maili], pos('hidden" name="',mailget[maili])+14, 50); delete(mname, pos('"',mname), length(mname)); mvalue:=copy(mailget[maili], pos('value="',mailget[maili])+7, length(mailget[maili])); delete(mvalue, pos('"',mvalue), length(mvalue)); mailpost.Add(mname+'='+mvalue); end; if (pos('name="x_', mailget[maili])<>0) and (pos('name="x_reg_id', mailget[maili])=0) then begin mname:=''; mname:=copy(mailget[maili], pos('name="x_',mailget[maili])+6, 18); mailtmp.Add(mname); // end; if pos('x_get_image_', mailget.Text)=0 then begin if (pos('img src="x_image?', mailget[maili])<>0) and (pos('&num=1', mailget[maili])<>0) then begin mln1:=copy(mailget[maili], pos('img src="x_image?',mailget[maili])+9, 60); delete(mln1, pos('"',mln1), length(mln1)); end; if (pos('img src="x_image?', mailget[maili])<>0) and (pos('&num=2', mailget[maili])<>0) then begin mln2:=copy(mailget[maili], pos('img src="x_image?',mailget[maili])+9, 60); delete(mln2, pos('"',mln2), length(mln2)); end; if (pos('img src="x_image?', mailget[maili])<>0) and (pos('&num=3', mailget[maili])<>0) then begin mln3:=copy(mailget[maili], pos('img src="x_image?',mailget[maili])+9, 60); delete(mln3, pos('"',mln3), length(mln3)); end; end; end; if pos('x_get_image_', mailget.Text)<>0 then begin mln4:=copy(mailget.Text, pos('x_get_image_',mailget.Text), 100); delete(mln4, pos('"',mln4), length(mln4)); [B]тут собираем капчу, если она состоит из трёх картинок[/B] end else [B]или несобираем, если капча из 1 картинки[/B] maillog:=randomlog(14); mailpas:=randomlog(12); // form1.Memo1.Text:=mailpost.Text+form1.Memo1.Text; randomize; ri:=random(3); if ri=0 then mailpost.add('RegistrationDomain=mail.ru'); if ri=1 then mailpost.add('RegistrationDomain=inbox.ru'); if ri=2 then mailpost.add('RegistrationDomain=bk.ru'); if ri=3 then mailpost.add('RegistrationDomain=list.ru') ; mailpost.add('RemindPhone='); mailpost.add('your_town='); mailpost.Add(mailtmp[0]+'='+randomname(8)); mailpost.Add(mailtmp[1]+'='+randomname(9)); mailpost.Add(mailtmp[2]+'='+inttostr(randomrange(1, 31))); mailpost.Add('BirthMonth='+inttostr(randomrange(1, 12))); mailpost.Add(mailtmp[3]+'='+inttostr(randomrange(1965, 1995))); mailpost.Add(mailtmp[4]+'='+inttostr(randomrange(1, 2))); mailpost.Add('Password_Question=Девичья фамилия матери'); mailpost.Add(mailtmp[5]+'='+maillog); mailpost.Add(mailtmp[6]+'='+mailpas); mailpost.Add(mailtmp[7]+'='+mailpas); mailpost.Add(mailtmp[8]+'='); mailpost.Add(mailtmp[9]+'='+randomlog(9)); mailpost.Add(mailtmp[10]+'='); mailpost.add('B1=Зарегистрировать почтовый ящик'); mailpost.Add(mailtmp[11]+'='+[B]разгадываем капчу[/B]); http.Request.ContentType:='application/x-www-form-urlencoded'; try http.Post('http://win.mail.ru/cgi-bin/reg', mailpost); except end; if pos(maillog,http.Response.Location)<>0 then begin while length(http.Response.Location)<>0 do begin try http.Get(http.Response.Location); except end; end; if ri=0 then result:=maillog+'@mail.ru:'+mailpas; if ri=1 then result:=maillog+'@inbox.ru:'+mailpas; if ri=2 then result:=maillog+'@bk.ru:'+mailpas; if ri=3 then result:=maillog+'@list.ru:'+mailpas; end else begin result:='bad'; showmessage('['+TimeToStr(Time)+'] '+p+'Ошибка регистрации почты на мэйл.ру.'); inc(popmail); if popmail=4 then begin showmessage('['+TimeToStr(Time)+'] '+p+'Неудалось зарегистрировать почту на мэйл.ру..'); break; end; end; end; except on E:Exception do begin result:='bad'; showmessage('['+TimeToStr(Time)+'] '+p+'Ошибка мэйл.ру: ' +E.Message); end; end; finally mailpost.free; mailtmp.Free; mailget.Free; end; end;
Предварительно захожу на страницу регистрации, отправляется запрос, из которого я получаю все поля, необходимые для отправки POST запроса на регистрацию (поля вида "x_fdgwg4g45g", id и тд). Затем отправляю запрос через InetCrack: Возвращает HTML ответ, в котором написано: В чем проблема?
1n0y, ваш код работает, спасибо. Правда после регистрации выскакивает ошибка по HTTP 302, но это уже не проблема, разберемся.
PHP подойдет? тут правда curl PHP: function auth_mail($login,$domain,$pass) { $ch = curl_init("http://win.mail.ru/cgi-bin/auth"); curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_COOKIEFILE, "cookie.txt"); curl_setopt($ch,CURLOPT_COOKIEJAR, "cookie.txt"); curl_setopt($ch,CURLOPT_POSTFIELDS,"Login=".$login."&Domain=".$domain."&Password=".$pass); $res = curl_exec($ch); if(preg_match("#Неверное имя пользователя или пароль#i",$res)) return false; elseif(preg_match("#Входящие#i",$res)) return true; }