使用sakemail控件如何删除邮件?(全部分了,救命呀)(65分)

  • 主题发起人 主题发起人 foley
  • 开始时间 开始时间
就是:
SakPOP1.DeleteMessage(i);
你遇到什么问题了?
 
可能要在 SakPop1.quit;才起作用。
 
我也是用的SakPOP1.DeleteMessage(i);方法。 但系统说我的MESSAGEINDEX 无
效。 我不知道是为什么,
在这里 i 是message 的序号还是messageid?

对了我忘了。 我也是在 SakPOP1.Quit 之前进行处理的。
 
我用过sakmail,的确DeleteMessage(i)是在quit时才执行,这里i是信件的序号
但是从源代码上看却不是这样。应该与quit没什么关系。
 
我知道了,你的i是从0开始的吧,应该从1开始,到SakPOP1.MsgsCount。
 
我试过了,她只能把SakMsgList中的邮件删除,我是想把pop3服务器上的邮件
删除请问该怎么办?
(接受时我必须要在服务器上保留副本,只有确认删除时才全部删除)
另外,谢谢 DreamTiger 邮件我已经收到。 谢谢 DreamTiger.
 
不会吧,我的程序中都可以删掉的啊。你能不能把你的程序贴出来,
大家帮你分析分析?
 
procedure TfrmPop3.BitRetrieveClick(Sender: TObject);
begin
screen.cursor:=crhourglass;
if sakpop1.Connected then
sakpop1.quit;
listbox1.Clear;
listbox2.clear;
memo1.Clear;
memo2.clear;
sakpop1.Host := edit1.text;
sakpop1.UserId := edit5.text;
sakpop1.UserPasswd := edit7.text;
sakpop1.Port := edit2.text;

StatusBar1.SimpleText := '请等待与邮局的连接...';
sakpop1.Connect;
if SakPOP1.POPError then
begin
MessageDlg( '连接失败。可能是邮局没有启动或者邮局没有响应。',
mtError, [mbOk], 0);
screen.cursor:=crdefault;
exit;
end;
if not SakPOP1.login then
begin
MessageDlg('用户名或密码错误!', mtError, [mbOk], 0);
screen.cursor:=crdefault;
exit;
end;
SakPOP1.Init;
ButCancel.Visible := true;
ProgressBar1.Visible := true;
sakPOP1.retrieveAllMessages( SakMsgList1);
ButCancel.Visible := false;
ProgressBar1.Visible := false;
if SakMsgList1.count > 0 then
begin
emailyaz;
// 该过程读取邮件的数量、简要信息和附件的文件名
end;
StatusBar1.SimpleText := '收到了 '+ intToStr( SakMsgList1.count) + ' 封信件。';
screen.cursor:=crdefault;
end;

////--------- 以上就是连接到pop3服务器读取邮件信息。
procedure TfrmPop3.emailyaz;
var
i: Integer;
str: String;
msg: TSakMsg;
begin
listbox1.items.clear;
StatusBar1.SimpleText := '正在接收新邮件...';
for i := 0 to sakmsglist1.Count - 1do
begin
msg := SakMsgList1.items;
str:=msg.From + ' ' + msg.Subject;
listbox1.items.add(str);
end;
StatusBar1.SimpleText := '';
end;

////---------
procedure TfrmPop3.BitDeleteClick(Sender: TObject);
begin
if Messagedlg('真的要删除当前选中的邮件吗?',
mtconfirmation,[mbok,mbcancel],0)=mrok then
begin
sakpop1.DeleteMessage(listbox1.itemindex+1);
// listbox1 存当前收到的邮件名称 + 发件人等信息。
end;
end;

不好意思。请各位给看看。 谢谢了。
 
我想是你的BitDeleteClick出了问题,最好是重新连接一次。
这是我的删除:
//删除SubjectList中选中的邮件(SunjectList:TViewList)
procedure TGetMail.DeleteMailClick(Sender: TObject);
var
i:integer;
begin
if(SubjectList.SelCount = 0) then
exit;
try
SakPOP1.UserId := sUserID;
SakPOP1.Host := sHost;
SakPOP1.UserPasswd := sPasswd;
SakPOP1.Port := '110';
SakPOP1.Connect;
if SakPOP1.POPError then
begin
MessageDlg( '连接失败!可能服务器已经关闭或者没有反应。',mtError, [mbOk], 0);
exit;
end;

if not SakPOP1.login then
begin
ShowMessage('登陆错误...用户名或者密码错误!');
exit;
end;

SakPOP1.Init;
if(SakPOP1.MsgsCount = 0) then
begin
SakPOP1.Quit;
ShowMessage('没有信件!你是不是用别的方法把信从服务器删了?');
SubjectList.Items.Clear;
exit;
end;

if(SakPOP1.MsgsCount < SubjectList.Items.Count) then
begin
ShowMessage('服务器上信件改变了,重读信件列表!');
SakPOP1.Quit;
exit;
end;

for i := SubjectList.Items.Count - 1do
wnto 0do
begin
if(SubjectList.Items.Item.Selected) then
begin
SubjectList.Items.Delete(i);
SakPOP1.DeleteMessage(i+1);
end;
end;
finally
if(SakPOP1.Connected) then
SakPOP1.Quit;
end;
end;

我这个程序用了很久了,应该没有问题的。
 
删除邮件就是向服务器发
DELE n CRLF (n为你要删除的邮件,你因该先看看RFC在写邮件的程序)
 
接受答案了.
 
DreamTiger 我用了你的那段程序改动之后就好使了。
谢谢了。 ( 不要告我盗版侵权呀。 :-) )
但我还是不明白是为什么? 我写的好像也是没有问题的呀。
好在能用了。 嘻嘻。
在次谢谢了。
 
呵呵,SakPop3有一个怪毛病,如果你Quit过以后,它的那些配置
(Host,Port,User,Password)都会被清除,如果你不重新填写,
连接的时候等于联到一个空地址上去了,当然删不掉了。我想你
的程序在读完信件后是不是在哪里Quit了一次。还有,你的程序
中删除信件后没有SakPop3.Quit,这样他不会真正删除,可能也
是一个原因。
 
后退
顶部