Пометить и удалить сообщения GMail с помощью Delphi / Indy - PullRequest
0 голосов
/ 25 января 2020

Как я могу удалить и пометить сообщения в GMail с помощью Delphi 10.3.3 / stock Indy.

Следующий подход не работает (я пропустил материал try / finally для сжатия кода):

var
  imap: TIdIMAP4;
  msg: TIdMessage;
  ...
  imap := TIdIMAP4.Create(nil);
  ...
  if imap.SelectMailBox('INBOX') then
  begin
    for i := 1 to imap.MailBox.TotalMsgs do
    begin
      imap.Retrieve(i, msg);
      imap.getUID(i, UID);
      ...
      imap.UIDStoreFlags(UID, sdReplace, msg.Flags - [mfSeen]);  -> DOESNT WORK
      ...
      imap.UIDStoreFlags(UID, sdReplace, msg.Flags + [mfAnswered]);  -> DOESNT WORK
      ...
      imap.UIDDeleteMsg(UID); -> DOESNT WORK
      ...
    end;
  end;
  ...
  imap.disconnect;
  imap.free;
  ...

Есть ли какие-либо обновления, которые я пропустил? Или мне нужно установить специальные настройки в учетной записи Gmail?

ОБНОВЛЕНИЕ: удаление теперь работает, но флаги по-прежнему не установлены. Удаление показывается с небольшой задержкой, но флаги сохраняются ...

1 Ответ

1 голос
/ 25 января 2020

Нашел решение: Мое нетерпение вызвало его.

Требуется до нескольких минут, пока изменение флага не отобразится в GMail. Поскольку я создаю сервер пересылки, работающий каждые 30 с, я буду хранить UID видимых сообщений за последний час или около того и также буду принимать во внимание этот список.

...