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 |
|
|