我花了几个小时试图理解为什么这根本不起作用,没有成功;(
我想用delphi应用程序发送私信。
我可以登录,阅读和删除邮件,但我无法设置发送邮件(我的论坛使用phpbb3)。
分析帖子数据,我得到了这个:
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;
注:
- 我已经向Opera发送了一条消息,并使用Fiddler here the image捕获了帖子数据。如您所见,数据结构是相同的,为什么还没有工作?
答案 0 :(得分:0)
主要问题很简单 - 等待时间(垃圾邮件防护)。另外,您应该首先添加用户 - 再多一个请求。
此代码应该可以正常工作
s:=FCon.Get('http://.../ucp.php?i=pm&mode=compose');
pp.Add('username_list=UserToADd');
pp.Add('add_to=Add');
pp.Add('icon=0');
pp.Add('subject=');
pp.Add('addbbcode20=100');
pp.Add('message=');
pp.Add('lastclick='+...);
pp.Add('status_switch=0');
pp.Add('creation_time='+...);
pp.Add('form_token='+...);
s:=FCon.Post('http://.../ucp.php?i=pm&mode=compose&action=post&sid=...', pp);
Sleep(2000); // <-- wait here
pp.Clear;
pp.Add('username_list=');
pp.Add('icon=0');
pp.Add('subject=XX');
pp.Add('addbbcode20=100');
pp.Add('message=YY');
pp.Add('address_list[u][2]=to');
pp.Add('lastclick='+...);
pp.Add('status_switch=0');
pp.Add('post=Submit');
pp.Add('attach_sid=on');
pp.Add('creation_time='+...);
pp.Add('form_token='+...); // new one
s:=FCon.Post('http://.../ucp.php?i=pm&mode=compose&action=post&sid=...', pp);