Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.09.23;
Скачать: [xml.tar.bz2];

Вниз

Получение почты в Delphi   Найти похожие ветки 

 
DimOk ©   (2007-08-27 12:23) [0]

Добрый день всем. Хочу поинтересоваться, как можно сохранить прикрепленные файлы к письму.
procedure TForm1.Button1Click(Sender: TObject);
var MyMessage:  TIdMessage;
   CountMessages: Integer;
   attach: TIDAttachment;
begin
MyMessage := TIdMessage.Create(nil);
IdPOP31.Connect();
CountMessages := IdPOP31.CheckMessages();
while CountMessages > 0 do begin
if IdPOP31.Retrieve(CountMessages,MyMessage) = True then begin
   RichEdit1.Lines.Assign(MyMessage.Body);
   attach := TIDAttachment.Create(MyMessage.MessageParts);
   //А дальше я не знаю что делать (касательно прикрепленных файлов)
  //attach.SaveToFile(const FileName: TFeliName): Boolean - как работает эта функция в хелпе нет ни каких данных и примеров по indy компонентам.
end;
CountMessages := CountMessages - 1;
end;
ShowMessage(IntToStr(IdPOP31.CheckMessages()));
MyMessage.Free;
IdPOP31.Disconnect;
end;


 
Сергей М. ©   (2007-08-27 12:29) [1]


> как работает эта функция в хелпе нет ни каких данных


Как это нет ?

Вот цитата как раз из хэлпа к этой ф-ции:

Stores a message part to a disk file.
function SaveToFile(const FileName: TFileName): Boolean;

Parameters

const FileName: TFileName

File name where the message part will be stored.

Return Value

Boolean - True when the message parts is stored.

Description

SaveToFile is a Boolean function used to store the attachment that represents the message part to the file specified in Filename.



Все просто и понятно, что еще надо ?


 
umbra ©   (2007-08-27 13:13) [2]

for i := 0 to attach.Count - 1 do
 if attach[i] is TIdAttachmentFile then
    attach[i].SaveToFile(attach[i].FileName);


 
DimOK ©   (2007-08-27 14:47) [3]


> for i := 0 to attach.Count - 1 do
>  if attach[i] is TIdAttachmentFile then
>     attach[i].SaveToFile(attach[i].FileName);


Так не помогает attach не имеет св-ва или процедуры Count  - при компиляции выделяет красным, может быть я не все unit использую.....?


 
DimOK ©   (2007-08-27 14:50) [4]


> Как это нет ?

для какого это message part? Это я видел у меня используется TIdMessage и
TIDAttachment....


 
Сергей М. ©   (2007-08-27 14:56) [5]


> для какого это message part?


Для всех подряд, очевидно.

А где ты спросил, что тебя интересует сохранение отдельной части в отдельный файл ?

Не было такого)


> attach не имеет св-ва или процедуры Count


См. св-во TIdMessage.MessageParts.AttachmentCount


 
DimOK ©   (2007-08-27 15:05) [6]


> См. св-во TIdMessage.MessageParts.AttachmentCount

Это понятно св-во содержит количество прикреплений, а как каждое из них по отдельности сохранить на жесткий диск?


 
DimOK ©   (2007-08-27 15:07) [7]

attach := TIDAttachment.Create(MyMessage.MessageParts);

Может я в этом ошибаюсь?


 
umbra ©   (2007-08-27 15:36) [8]

ДА, это я чушь спорол

uses ..., IdMessageParts, ....
var
 attfile: TIdAttachmentFile;
{.................................}
with MyMessage.MessageParts do
  for i := 0 to Count - 1 do
       if Items[i].PartType = mptAttachment then
         begin
           attfile := Items[i] as TIdAttachmentFile;
           attfile.SaveToFile(attfile.FileName);
          end;


 
DimOK ©   (2007-08-27 15:59) [9]


> uses ..., IdMessageParts, ....

Теперь, иам ругается [Fatal Error] Unit1.pas(8): File not found: "IdMessageParts.dcu"


 
DimOK ©   (2007-08-27 16:03) [10]


> attfile: TIdAttachmentFile;

и здесь [Error] Unit1.pas(37): Undeclared identifier: "TIdAttachmentFile"


 
umbra ©   (2007-08-27 16:04) [11]


> [Fatal Error] Unit1.pas(8): File not found: "IdMessageParts.
> dcu"
>


Ну тогда дело плохо. У Вас какая версия Инди? Я про 10-ую.


 
DimOK ©   (2007-08-27 16:06) [12]


> Ну тогда дело плохо. У Вас какая версия Инди? Я про 10-ую.

Тогда все понятно 9.00.10 :)


 
umbra ©   (2007-08-27 16:17) [13]

но в 9-ке все равно где-то объявлен тип TIdMessageParts. Поищите поиском по тексту модулей и добавьте нужный в юзесы.


 
DimOK ©   (2007-08-27 16:41) [14]

TIdMessage содержит MessageParts у которого нет функции SaveToFile(......), для отправки сообщения я использовал следующее:
TIDAttachment.Create(MainForm.MyMessage.MessageParts,"Выгрузка.xml"); и все нормально проходит, а при получении я не знаю как добраться именно до прикрепленных данных
быть может я не правильно использую TIDAttachment....


 
DimOK ©   (2007-08-27 16:43) [15]


> но в 9-ке все равно где-то объявлен тип TIdMessageParts.
>  Поищите поиском по тексту модулей и добавьте нужный в юзесы.
>

Поиск не дал результата.....:(


 
Сергей М. ©   (2007-08-27 16:47) [16]


> Поиск не дал результата


Быть того не может.

Если у тебя не возникли проблемы с ид-ром TIdMessage, то и с TIdMessageParts тоже не должны возникнуть - оба ид-ра объявлены в одном и том же юните IdMessage.pas.

Где и как ты "искал" - непонятно)


 
DimOK ©   (2007-08-27 16:55) [17]


> Где и как ты "искал" - непонятно)

Search->Find in Files;Find искал TIdMessageParts


 
DimOK ©   (2007-08-27 16:57) [18]


> > Где и как ты "искал" - непонятно)
>
> Search->Find in Files;Find искал TIdMessageParts

Сорри ступи, нашел :)


 
DimOK ©   (2007-08-27 17:00) [19]


> Поищите поиском по тексту модулей и добавьте нужный в юзесы.

содержиться в IdMessage, но он у меня используется.


 
Сергей М. ©   (2007-08-27 17:04) [20]


> он у меня используется


ТОгда ты что-то путаешь.

"ругани" именно на TIdMessageParts быть никак не должно.


 
DimOK ©   (2007-08-27 17:08) [21]


> ТОгда ты что-то путаешь.
>
> "ругани" именно на TIdMessageParts быть никак не должно.
>

т.е. я пишу var: mess_parts: TIdMessageParts; и все должно быть ништяк.....
так пишу......

И правда не ругается...:)
Буду ковырять дальше.


 
DimOK ©   (2007-08-27 17:24) [22]


> > ТОгда ты что-то путаешь.
> >
> > "ругани" именно на TIdMessageParts быть никак не должно.
>
> >
>
> т.е. я пишу var: mess_parts: TIdMessageParts; и все должно
> быть ништяк.....
> так пишу......
>
> И правда не ругается...:)
> Буду ковырять дальше.

но тогда у mess_parts нету функции SaveToFile


 
umbra ©   (2007-08-27 18:02) [23]

with MyMessage.MessageParts do
 for i := 0 to Count - 1 do
      if Items[i] is TIdAttachment then
           TIdAttachment(Items[i]).SaveToFile(TIdAttachment(Items[i]).FileName);


 
DimOk ©   (2007-08-28 09:28) [24]


> with MyMessage.MessageParts do
>  for i := 0 to Count - 1 do
>       if Items[i] is TIdAttachment then
>            TIdAttachment(Items[i]).SaveToFile(TIdAttachment(Items[i]).
> FileName);

Вроде все ништяк - уже обрабовался....но....
Пишет List index out of bounds (0)
Проверил - написал ShowMessage(IntToStr(MyMessage.MessageParts)) выдает нуль, хотя сообщение содержит два прикрепления...:(


 
DimOk ©   (2007-08-28 09:33) [25]


> Проверил - написал ShowMessage(IntToStr(MyMessage.MessageParts))
> выдает нуль, хотя сообщение содержит два прикрепления...
> :(

Может быть у меня Exchange забирает почту быстрее чем программа...? :)
Попробую с другим ящиком....


 
DimOk ©   (2007-08-28 09:41) [26]


> Может быть у меня Exchange забирает почту быстрее чем программа.
> ..? :)
> Попробую с другим ящиком....

Нет такая же шняга


 
Сергей М. ©   (2007-08-28 09:44) [27]


> DimOk ©   (28.08.07 09:41) [26]


Ну есть же демо-проект в составе Инди - maildemo.dpr, почему не изучить его ?


 
DimOk ©   (2007-08-28 10:01) [28]


> Ну есть же демо-проект в составе Инди - maildemo.dpr, почему
> не изучить его ?

C:\Program Files\Borland\Delphi7\Demos\Indy - если это там, то это текстовый фай в котором содержиться следующее:

Delphi 7
Indy V9 Demos

===========================

Indy V9 Demos

Demo applications for Indy V9 are available from the
downloads section on the Indy site at:

http://www.nevrona.com/indy

As new demos are constantly being built and tested,
this is the most up to date location for demo
downloads.

If you have any problems with demos please join the
"Indy Demos" group at yahoo groups, and report them
there:

http://groups.yahoo.com/group/Indy-Demos/

http://www.nevrona.com/indy - на этот ресурс я заходил но что там скачевать так и не понял...


 
DimOk ©   (2007-08-28 10:03) [29]

Понял в чем дело цикл - у меня получается черт знает каой:
CountMessages := IdPOP31.CheckMessages();
while CountMessages > 0 do begin
  with MyMessage.MessageParts do begin
    for i := 0 to Count - 1 do begin
      if Items[i] is TIdAttachment then begin
           TIdAttachment(Items[i]).SaveToFile(TIdAttachment(Items[i]).FileName);
      end;
    end;
   end;
  CountMessages := CountMessages - 1;
end;
MyMessage.MessageParts - это постоянно одно и тоже сообщение, т.е. нет перехода к следующему. Как его осуществить не подскажите?


 
DimOk ©   (2007-08-28 10:09) [30]


> MyMessage.MessageParts - это постоянно одно и тоже сообщение,
>  т.е. нет перехода к следующему. Как его осуществить не
> подскажите?

Все понял
IdPOP31.Retrieve(CountMessages,MyMessage)


 
DimOk ©   (2007-08-28 10:20) [31]

TIdAttachment(Items[i]).SaveToFile(TIdAttachment(Items[i]).FileName);
После этой строки теперь ругается пишет что не может сохранить.


 
umbra ©   (2007-08-28 10:33) [32]


> пишет что не может сохранить

что и куда? полный текст сообщения можно?


 
DimOk ©   (2007-08-28 10:38) [33]

Error saving Attachment


 
umbra ©   (2007-08-28 10:45) [34]

а если в отладчике посмотреть, чему равно FileName?


 
Anatoly Podgoretsky ©   (2007-08-28 10:50) [35]

> DimOk  (28.08.2007 10:20:31)  [31]

И куда по твоему он будет сохранять?


 
DimOk ©   (2007-08-28 10:52) [36]

Пишет - ундекларе идентифер Items[i], но после того как я написал:
SaveToFile(TIdAttachment(MyMessage.MessageParts.Items[i]).FileName);
Все заработало! Всем огромное спасибо!


 
DimOk ©   (2007-08-28 10:53) [37]


> И куда по твоему он будет сохранять?

Если указать только имя то в папку с проектом, а можно и "C:\бла бла бла\" + MyMessage.MessageParts.Items[i]).FileName


 
Anatoly Podgoretsky ©   (2007-08-28 10:53) [38]


> а если в отладчике посмотреть, чему равно FileName?

А чего смотреть и так ясно, что он равен информации в письме, если она прописана.
Его возможно надо обработать до допустимого и указать куда сохранять, как это делают почтовики, а не а бы куда и черт знает что записать.


 
Anatoly Podgoretsky ©   (2007-08-28 10:54) [39]


> Пишет - ундекларе идентифер Items[i], но после того как
> я написал:

Как и предполагалось - обманывал нас.


 
Anatoly Podgoretsky ©   (2007-08-28 10:55) [40]


> Если указать только имя то в папку с проектом,

Заблуждение



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.09.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.059 c
2-1188224368
hahol
2007-08-27 18:19
2007.09.23
простите за глупый вапрос


2-1188390706
Cobalt
2007-08-29 16:31
2007.09.23
var-Параметры_процедур - указатели. То ли лыжи не едут, ....


2-1188239126
Евгений Р.
2007-08-27 22:25
2007.09.23
Вертикальный текст


6-1170097905
nes_
2007-01-29 22:11
2007.09.23
idhttp.post + мульпартформдата


2-1188554563
БарЛог
2007-08-31 14:02
2007.09.23
Как узнать свободное место на удалённом компьютере?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский