Delphi Read Email с помощью Outlook Automation

У меня есть работающий код, который я могу использовать для чтения основного текста письма. Проблема в том, что я хотел бы переместить прочитанные письма. Например, я прочитал почту в папке "Входящие" и хочу переместить ее в другую папку в Outlook. После поиска я могу сделать это командой Move, но моя программа выдает ошибку "Array out of bounds ". Например, у меня есть 4 электронных письма в папке входящих сообщений Outlook, он перемещает только 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 ответ

Решение

Ваш код уменьшает количество сообщений в. Цикл от обратного отсчета до 1:

for ii := deger downto 1 do begin

Я не уверен, почему вы снова открываете сообщение внутри цикла. Нет абсолютно никаких причин для этого. Это также хорошая идея, чтобы избежать многоточечной нотации в вашем коде.

Другие вопросы по тегам