Email Delphi使用Outlook Automation阅读电子邮件

Email Delphi使用Outlook Automation阅读电子邮件,email,outlook,delphi-7,ole,ole-automation,Email,Outlook,Delphi 7,Ole,Ole Automation,我有一个运行的代码,我可以用来阅读电子邮件正文。问题是我想移动我阅读的邮件。例如,我在收件箱中阅读邮件,并希望将其移动到Outlook中的另一个文件夹中。在searchin之后,我可以使用Move命令来执行这个操作,但是我的程序给出了错误“Array out-bounds”。 例如,我在Outlook收件箱中有4封电子邮件,它只移动2个文件,并给出此错误。 我的代码有什么问题?请帮忙,谢谢 try ovOutlook := CreateOleObject('Outlook.Application

我有一个运行的代码,我可以用来阅读电子邮件正文。问题是我想移动我阅读的邮件。例如,我在收件箱中阅读邮件,并希望将其移动到Outlook中的另一个文件夹中。在searchin之后,我可以使用Move命令来执行这个操作,但是我的程序给出了错误“Array out-bounds”。 例如,我在Outlook收件箱中有4封电子邮件,它只移动2个文件,并给出此错误。 我的代码有什么问题?请帮忙,谢谢

try
ovOutlook := CreateOleObject('Outlook.Application');
ovNameSpace := ovOutlook.GetNameSpace('MAPI');
ovNameSpace.Logon('', '', False, True);
ovFolder := ovNameSpace.GetDefaultFolder(olFolderInbox);
OtherFolder:=ovFolder.Parent.Folders('BTM');
deger:= ovFolder.items.count;
for ii := 1 to deger do begin
 if VarIsNull(ovFolder.Items[ii]) or VarIsEmpty(ovFolder.Items[ii])  then Continue;
  ovEmailItem := ovNameSpace.GetItemFromID(ovFolder.Items[ii].EntryID);
  ovFolder.Items[ii].Move(otherfolder);
end;
finally
ovEmailItem := Unassigned;
ovOutlook := Unassigned;
ovNameSpace := Unassigned;
ovFolder := Unassigned;
OtherFolder :=   Unassigned;
end;

您的代码正在减少中的邮件数。循环从倒计时到1:

for ii := deger downto 1 do begin
我不知道为什么要在循环中重新打开消息。绝对没有理由这么做。
在代码中避免使用多点符号也是一个好主意。

使用调试器。在ii的
行上设置断点,然后运行到断点。现在检查deger是什么,然后慢慢地通过循环,跟踪每次
ii
的值。发生异常时的索引是什么?如果异常发生时
deger
为4,并且
ii=4
,则表示数组基于0,循环应该从0运行到deger-1。如果不是这样的话,你至少会知道是哪一行代码导致了问题,这样你就知道应该去哪里解决问题。我已经做了,但仍然没有意义。例如,如果outlook收件箱中有4封邮件,则deger是4封,但当谈到for循环时,它会停止并在deger是3时出现错误。我的目标是打开进入outlook收件箱的邮件,读取正文,将其保存到txt文件,然后移动或删除邮件。这就是我尝试进行循环的原因,但它给出了数组越界错误:(