C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Получение почты с помощью компонентов Indy
Liana
Отправлено: 24.07.2006, 15:12


Не зарегистрирован







Доброго времени суток!
У меня такая проблема с приемом почты:
CODE

POP3->Connect();// POP3 это TIdPOP3
       if(POP3->Connected())
         {
           KolMsg = POP3->CheckMessages();
           if(KolMsg == 0)
              return;
           else
             {
                AnsiString FName;
                for(int i(1); i <= KolMsg; i++)
                   {
                     // Последовательно считываем письма с сервера
                     NumMsg = i;
                     ParamMsg->Clear(); //ParamMsg это TIdMessage
                     ParamMsg->ClearBody();
                     ParamMsg->NoDecode = false; // есть аттачи но нет тела
                     //ParamMsg->NoDecode = true; // есть тело но нет аттачей
                     ParamMsg->ContentTransferEncoding = "base64";

                     POP3->Retrieve(i,ParamMsg);

                     FromAddr = Trim(ParamMsg->From->Address);
                     Subject = Trim(ParamMsg->Subject);

                     Memo->Lines->Add(ParamMsg->Body->Text);
                      FName = "";
                     // Обработаем аттачи
                     for(int i = 0; i < ParamMsg->MessageParts->Count; i++)
                       {
                         TIdAttachment *Attach = dynamic_cast<TIdAttachment*>(ParamMsg->MessageParts->Items[i]);
                         if(Attach)
                           {
                             FName = ParamStr(0);
                             FName = FName.SubString(1,LastDelimiter("\",ParamStr(0)))+"\Attaches\Attach0"+IntToStr(NumMsg)+"_"+IntToStr(i)+".tmp";
                             if(FileExists(FName))
                               DeleteFile(FName);
                             Attach->SaveToFile(FName);
                             StrFName = StrFName+"|"+FName;
                             delete Attach;
                           }
                         else
                           {
                             // Обработаем тело письма
                             TIdText *Txt = dynamic_cast<TIdText*>(ParamMsg->MessageParts->Items[i]);
                             if(Txt)
                               Memo->Lines->Add(Txt->Body->Text);
                             delete Txt;
                           }  
                       }

Если значение ParamMsg->NoDecode = true то аттач содержится в теле письма закодированный, а ParamMsg->NoDecode = false то аттачи благополучно извлекаются, но Txt->Body->Text содержит NULL.
Господа профессионалы! Подскажите пожалуйста как мне быть:
1. Вытаскивать и раскодировать аттач из тела письма, указывая ParamMsg->NoDecode = true.
2. Или же у меня гдето ошибка в коде, если я использую ParamMsg->NoDecode = false добывая тело письма.

Отредактировано Gedeon — 24/07/2006, 17:30

Вернуться в Вопросы программирования в C++Builder