TIdMessage.Body is NULL

Giganews Newsgroups
Subject: TIdMessage.Body is NULL
Posted by:  eduardo (eduardo.ju…@ges3000.com)
Date: Thu, 16 Jun 2005

Hi

I have another problem, I work with C++ Builder 6 & Indy 9.00.15, I have
code to retrieve a simple text mail with IdPOP3 component.

I haven´t problem to retrive mail and I obtain de Name (From) and Subjet
from mail perfetly with TIdMessage but and now to retrieve the body, now I
write the code I have:

bool __fastcall TfConexionPop::descargarCorreo ()
{
    bool bDevolver= true;
    int iTotalMensajes= 0, iRecuperados= 0;
    String stDe, stAsunto, stMensaje;
    TDate dtFecha;

    lbMensaje->Caption = "Buscando mansajes";
    lbMensaje->Refresh();
    IdPOP3->Connect(180000);

    try {
        iTotalMensajes= IdPOP3->CheckMessages();

        for (int iCont= 1; iCont <= iTotalMensajes; iCont++)
        {
            Application->HandleMessage();
            lbMensaje->Caption = "Procesando mensaje "+ IntToStr(iCont)
+"/"+ IntToStr(iTotalMensajes);
            pbMensajes->Position= iCont * 100 / iTotalMensajes;

            IdPOP3->RetrieveHeader(iCont, IdMensaje);

            stAsunto = UpperCase(IdMensaje->Subject);

            if (stAsunto.SubString(1,7) == ".INGM2.")
            {
                stDe= IdMensaje->From->Name;
                stAsunto= IdMensaje->Subject.SubString(8,
IdMensaje->Subject.Length());
                dtFecha=  IdMensaje->Date;

            // Hear  I have the problem *********************************

                if (IdMensaje->Body->Text != "")
                    stMensaje= IdMensaje->Body->Text;
                else
                {
                    for (int p= 0; p < IdMensaje->MessageParts->Count; p++)
//  IdMensaje->MessageParts->Count is 0 because the is a text/plain, I
think.
                    {
                        if (dynamic_cast <TIdText *>
(IdMensaje->MessageParts->Items[p]) != NULL)
                            stMensaje= dynamic_cast<TIdText *>
(IdMensaje->MessageParts->Items[p])->Body->Text;
                    }
                }

            // Hear  I have the problem *********************************
the stMensaje var, allways is NULL

                if (grabarMensaje(stDe, stAsunto, stMensaje, dtFecha))
                {
                    iRecuperados++;
                    IdPOP3->Delete(iCont);
                }
            }

            IdMensaje->Clear();
        }

        if (iRecuperados > 0)
            lbMensaje->Caption = "Mensajes recibidos y guardados "+
IntToStr(iRecuperados) +" de "+ IntToStr(iTotalMensajes);
        else if (iTotalMensajes == 0)
            lbMensaje->Caption = "No hay mensajes";
    }
    __finally
    {
        IdPOP3->Disconnect();
    }

    return bDevolver;
}

Thx.
Eduardo

Replies