我花了一些時間,試圖理解爲什麼這根本不起作用,沒有成功;(發送私人消息,亞歷克 - 德爾福
我想用我的Delphi應用程序發送私人郵件
。 。我可以登錄,讀取和刪除的郵件,但我不能設法發送郵件(我的論壇使用。中文)
分析後的數據,我得到這個:
Post URL: http://example.com/ucp.php?i=pm&mode=compose&action=post&sid=xxxxx
Post Data:
username_list=
icon=0
subject=assunto
message=texto
address_list[u][2]=to
lastclick=xxxx
status_switch=0
post=Submit
attach_sig=on
creation_time=xxxx
form_token=xxx
的我需要在發送之前獲得xxx值。我手動檢查了這些值,它們是正確的。
我的代碼:
procedure Envia();
var
form_token, cr_time, sid: string;
pp: TStringList;
begin
//download the page to get the values (token, sid...)
FPageSource.Text := FCon.Get('http://example.com/ucp.php?i=pm&mode=compose&u=2');
//form token
form_token := TRegEx.Match(FPageSource.Text, 'form_token" value="(\w+)"').Groups[1].Value;
//creation time
cr_time := TRegEx.Match(FPageSource.Text, 'creation_time" value="(\w+)"').Groups[1].Value;
//sid
sid := TRegEx.Match(FPageSource.Text, 'sid=(\w+)').Groups[1].Value;
//data
pp := TStringList.Create;
pp.Add('username_list=');
pp.Add('icon=0');
pp.Add('subject=assunto');
pp.Add('message=mensagem');
pp.Add(HttpEncode('address_list[u][2]') + '=to');
pp.Add('lastclick=' + cr_time);
pp.Add('status_switch=0');
pp.Add('post=Submit');
pp.Add('attach_sid=on');
pp.Add('creation_time=' + cr_time);
pp.Add('form_token=' + form_token);
//send
FPageSource.Text := FCon.Post('http://example.com/ucp.php?i=pm&mode=compose&action=post&sid=' + sid, pp);
//The result in FPageSource is my inbox, my post data was
//ignored by phpbb ;(
end;
注:
- FCON = TIdHttp
- FPageSource =的TStringList
- HttpEncode =在HttpApp單元功能
- 用Delphi XE6
- 我用Opera發送了一條消息,並使用Fiddler,here the image捕獲了發佈數據。正如你所看到的,數據結構是一樣的,爲什麼不工作?
您捕獲從歌劇的請求;你的程序的等價捕獲在哪裏?他們匹配嗎?換句話說,你怎麼知道你真的在發送你認爲你發送的東西? –
@RobKennedy發佈的數據是一樣的,但返回代碼是302,如果仔細觀察,您會看到身體大小爲0.檢查新圖像:[New Image](http://i.imgur .com/HngHvEj.png) - 編輯:HandleRedirects = true,結果相同>< –
頭文件怎麼樣?發送和接收。他們也一樣嗎? –