Поиск:

Ответ в темуСоздание новой темы Создание опроса
> idpop3 и nmpop3, коректное приянтие аттчачейр 
:(
    Опции темы
кккккк
Дата 14.4.2009, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 14.4.2009

Репутация: нет
Всего: нет



задача,используя компоненты idpop3 и nmpop3(любой,лиж бы получилось) принять почту,и сохранить аттачи,тоесть прикрепленные файлы

в Nmpop3 эта задача решена GetMailMessage() НО если прикрепленный файл будет соержать НЕ латинские символы, выдает ошибку,и соответственно некого сохранения не происходит...

вобщем вопрос такой,как коректно используя эти компоненты на выбор,принять почту и сохранить атачи на компе?


весь интернет обрыл,куча не рабочих примеров,и еще большая куча на делфи НО толку ноль...

P.S файл лиж бы сохранить,под любым именем...быть может быть есть какая то функция с помощью которой можно изменить имя сохраняемого файла,т.к GetMailMessage()  выдает ошибку именно из за того что он не может сохранить файл под именем koir-8_adadfHKCVTYF- ну и так дадлее т.к некоторые символы запрещены для названия файлов

Это сообщение отредактировал(а) кккккк - 14.4.2009, 20:04
PM MAIL   Вверх
кккккк
Дата 14.4.2009, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 14.4.2009

Репутация: нет
Всего: нет



на форме 1 кнопка Button2,Memo1,IdPop3

полностью рабочий код,атачи сохраняет,НО с условием что приатченого файла совпадет с  
      IdAttach->SaveToFile("c:\\new.jpg"); ---типом файла в который мы сохраняем....как бы это обойти?


void __fastcall TForm1::Button2Click(TObject *Sender)
{
 int i, MailCount = 0, p, PartCount;

 AnsiString Subj, FileExt, FileName;

 TIdMessage *IdMsg;

 TIdAttachment *IdAttach;

 TIdText *IdText;

IdMsg = NULL;

 if(IdPOP31->Connected()) IdPOP31->Disconnect();

 IdPOP31->Host = "pop.bk.ru"; // Íàïðèìåð

 IdPOP31->UserId = "[email protected]";

 IdPOP31->Password = "7592374";

 IdPOP31->Port = 110;

 IdPOP31->Connect();


MailCount = IdPOP31->CheckMessages();
//Text= IntToStr(MailCount);






 if(MailCount > 0){ // 1

  for(i = 1; i <= MailCount; i++){ // 2

    if(IdMsg != NULL) delete IdMsg;

    IdMsg = new TIdMessage(this);



    if(IdPOP31->Retrieve(i, IdMsg)){ // 3

    Subj = IdMsg->Subject.UpperCase();

    if(true){ // 4

    Memo1->Lines->Add(IntToStr(PartCount = IdMsg->MessageParts->Count));

    for(p = 0; p < PartCount; p++){  // 5



     if(IdMsg->MessageParts->Items[p]->ClassNameIs("TIdAttachment")){ // 6

      IdAttach = (TIdAttachment*) IdMsg->MessageParts->Items[p];



      Memo1->Lines->Add(FileName = IdAttach->FileName);

      //if(FileExists(FileName)) DeleteFile(FileName);

      IdAttach->SaveToFile("c:\\new.jpg");



        FileExt = ExtractFileExt(FileName).LowerCase();

      if((FileExt == ".cds" || FileExt == ".xml") && FileExists(FileName)){ // 7


        } // 7

     } else { if(IdMsg->MessageParts->Items[p]->ClassNameIs("TIdText")){ // 8



          } // 8

        } // 6

      } // 5

    } // 4

  // IdPOP31->Delete(i);

   } // 3

  } // 2

 } // 1

 if(IdPOP31->Connected()) IdPOP31->Disconnect();

 if(IdMsg != NULL) delete IdMsg;
}
PM MAIL   Вверх
кккккк
Дата 14.4.2009, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 14.4.2009

Репутация: нет
Всего: нет



окончательное решение, вайл сохраняется без разрешения,имя выбирается так что вероятность что на диске будет 2 одинаковых файла почти не реальна....в программе задумано что файлы типа txt jpg pdf gif открываются в браузере-так что загрвежаем файл без разрешения прямо в браузер и он коректно отображается-задача решена....2 тип файлов- doc и xls - используют оле контейнер - при загрузке аттача FileName будет выглядеть примерно так Koir-8 LYKLmnkjhuiJhkjhkhkh. doc -так что что это док файл мы понять тоже можем...(см. операции со строками).....вот и все


void __fastcall TForm1::Button31Click(TObject *Sender)
{

Word y1,m1,dd;
Word y2,m2,dd2,ms;

IdMsg = NULL;

 if(IdPOP31->Connected()) IdPOP31->Disconnect();

 IdPOP31->Host = "pop.bk.ru"; // Íàïðèìåð

 IdPOP31->UserId = "[email protected]";

 IdPOP31->Password = "7592374";

 IdPOP31->Port = 110;

 IdPOP31->Connect();


MailCount = IdPOP31->CheckMessages();


 if(MailCount > 0){ // 1

  for(i = 1; i <= MailCount; i++){ // 2

    if(IdMsg != NULL) delete IdMsg;

    IdMsg = new TIdMessage(this);



    if(IdPOP31->Retrieve(i, IdMsg)){ // 3

    Subj = IdMsg->Subject.UpperCase();

    if(true){ // 4

    Memo1->Lines->Add(IntToStr(PartCount = IdMsg->MessageParts->Count));

    for(p = 0; p < PartCount; p++){  // 5



     if(IdMsg->MessageParts->Items[p]->ClassNameIs("TIdAttachment")){ // 6

      IdAttach = (TIdAttachment*) IdMsg->MessageParts->Items[p];



      Memo1->Lines->Add(FileName = IdAttach->FileName);

      //if(FileExists("c:\\temp\\new")) DeleteFile("c:\\temp\\new");


        FileExt = ExtractFileExt(FileName).LowerCase();

      if((FileExt == ".cds" || FileExt == ".xml") && FileExists(FileName)){ // 7


        } // 7

     } else { if(IdMsg->MessageParts->Items[p]->ClassNameIs("TIdText")){ // 8



          } // 8

        } // 6

      } // 5

    } // 4

  // IdPOP31->Delete(i);

   } // 3
 d2=d1.CurrentDate();
DecodeDate(d2,y1,m1,dd);
d2=d1.CurrentTime();
DecodeTime(d2,y2,m2,dd2,ms);
t=IntToStr(y1)+IntToStr(m1)+IntToStr(dd)+IntToStr(y2)+IntToStr(m2)+IntToStr(dd2);


      IdAttach->SaveToFile("c:\\temp\\"+t+i);
      ListBox4->Items->Add(t+i);

      //--------ïî÷òà----------
TIdMessage *M = new TIdMessage(Form1);
M->Body->Text="PERSONAL ID - "+ t+i;
M->From->Text ="[email protected]"; //îòïðàâèòåëü
M->Recipients->EMailAddresses=IdMsg->From->Address; //"[email protected]";//ïîëó÷àòåëü
M->Subject = "PERSONAL ID_"+d.CurrentDateTime(); //Òåìà ïèñüìà
IdSMTP1->Host ="smtp.bk.ru"; // èìÿ ïî÷òîâîãî ñåðâåðà
IdSMTP1->AuthenticationType = atLogin;
IdSMTP1->UserId = "[email protected]"; // ëîãèí
IdSMTP1->Password = "7592374"; // ïàðîëü
try{
IdSMTP1->Connect();
if(IdSMTP1->Connected())
IdSMTP1->Send(M); // îòïðàâêà ñîîáùåíèÿ

IdSMTP1->Disconnect();
delete M;
}
catch(...){}
  } // 2

 } // 1

 if(IdPOP31->Connected()) IdPOP31->Disconnect();




if(IdMsg != NULL) delete IdMsg;


PM MAIL   Вверх
Alca
Дата 14.4.2009, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Используй тэг "код".

Добавлено @ 22:35
У меня С++Builder 6.0 + Indy 10 - все отображается гуд.  smile 

Это сообщение отредактировал(а) Alca - 14.4.2009, 22:35


--------------------
PM WWW ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0426 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.