$8004005 (E_FAIL) Error when accessing attachments in CDO

I am developing a workflow application using CDO 1.21.
I am plagued by an unpredictable occurrence of a generic
call failure (CdoE_CALL_FAILLED, MAPI_E_FAIL) error when
accessing the attachments collection. This happens
occasionally, and I cannot detect a pattern.

I was able to find a workaround, using this abomination of a CDO call:

function TMessagingDm.GetAttachments(Msg: MAPI_TLB.Message): MAPI_TLB.Attachments;
    Attempts = 20;
    Unk: IUnknown;
    Indx: Integer;
  Indx := 0;
  while True do  //try Attempts times before failing
      Unk := IUnknown(Msg.Attachments); //--> this is where it would fail!
      Result := Unk as MAPI_TLB.Attachments;
      on E: EOleException do
        //if Indx > 1 then ShowMessage('Failed ' + IntToStr(Indx) + ' times');
        if (Indx > Attempts) or
          (Longword(E.ErrorCode) <> CdoE_CALL_FAILED) then raise;

I have not seen Indx go beyond 2, i.e. it happend at most twice in a row,
but more extensive tests might change that impression.

I have tried different versions of CDO.DLL, but without success.
I have tried reloading the Message object prior to each call, also without success.

I am running the app on win 2000 SP2, I have MS Outlook SR1 installed.
The Exchange server is version 5.5, I don't know which ServicePack, but I assume its SP4.

With "happens occasionally" I mean: user clicks around in a list of messages,
accessing the Attachments collection each time. After 2 to 10 clicks one can
expect to have that error come up. Next time clicking on the same message
is usually fine.

Other hints I can give: I am accessing the Attachments collection more
than once per Message object, i.e. I do not create and destroy the Message
each and every time.

Does anybody else have similar experiences, advice, ...?