Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.22;
Скачать: CL | DM;

Вниз

Вложение электронной почты   Найти похожие ветки 

 
Alex Ford   (2008-05-29 10:14) [0]

Здрасте!

В отправляемое сообщение необходимо прикрепить файлы. По одному получилось. Но 2-3...n файлов не отправляет. Если в атачменте список файлов представляется в виде списка - StringList.
В список файлы добавлены. Для наглядности отображеню в ListBox.
Но отправляет только один файл - последний.
Подскажите плиз, в чем ошибка?

       
for i:=0 to filelist.Count-1 do
   TIdAttachment.Create(M1.MessageParts, filelist.Strings[i]);


 
Reindeer Moss Eater ©   (2008-05-29 10:16) [1]

В том, что у тебя аттачметов создается по числу файлов, и используется последний


 
Alex Ford   (2008-05-29 10:19) [2]

Тогда как правильно решить?
Я пытался в таком виде C:\file1.txt+";"+file2.txt
Но не пашет. Помоему перечислять имена файлов можно через разделитель - т.е. указать ";"


 
Reindeer Moss Eater ©   (2008-05-29 10:21) [3]

Помедитируй над этим:

for i:=0 to filelist.Count-1 do
  TIdAttachment.Create

сколько аттачметов будет создано?
и куда деваются ссылки на все кроме последнего.


 
Palladin ©   (2008-05-29 10:24) [4]


> Reindeer Moss Eater ©   (29.05.08 10:21) [3]

что бы медитировать над ссылками, нужно знать, что это такое :)


 
Alex Ford   (2008-05-29 10:26) [5]

сколько файлов - столько и аттачменов


 
Reindeer Moss Eater ©   (2008-05-29 10:29) [6]

ну тогда у тебя все ок. чего жалуешься?


 
Reindeer Moss Eater ©   (2008-05-29 10:32) [7]

ты спросил в чем у тебя ошибка.
тебе ответили в чем.
ты продолжаешь упорствовать, что "тебе так надо", и что "так и задумано"

валяй.


 
Alex Ford   (2008-05-29 10:33) [8]

Проблема в том, что усли указать в аттачмене просто (C:\Temp\File1.txt) то он отправится без проблем. Один файл. Мне нужно отправить ЛЮБОЕ количество файлов. Я создаю StringList и добавляю имена файлов.
Перед отправкой перебираю весь спиок. Но отправляется только последний файл. Запутался уже. Подскажите в какую сторону копать. Чтобы решить задачу с отпракой файлов с N количеством


 
Alex Ford   (2008-05-29 10:35) [9]

Этот код прокатит без проблем TIdAttachment.Create(Msg.MessageParts,"c:\file.zip");

А этот код не катит вообще TIdAttachment.Create(Msg.MessageParts,"c:\file.zip"+";"+"c:\file2.zip");


 
Reindeer Moss Eater ©   (2008-05-29 10:37) [10]

Проблема в том, что усли указать в ....

настоящая проблема описана в [1]


 
Reindeer Moss Eater ©   (2008-05-29 10:40) [11]

Экземпляр TIdAttachment должен быть один


 
Alex Ford   (2008-05-29 10:44) [12]

мдя..... валяй....
Ясно что аттачмент должен быть один. Мне непонятно как использовать привязку нескольких файлов. С одним файлом я разобрался.


 
Reindeer Moss Eater ©   (2008-05-29 10:45) [13]

Если ясно, то выноси создание экземпляра TIdAttachment из цикла.


 
Alex Ford   (2008-05-29 10:47) [14]

ты имеешь в виду просто TIdAttachment.Create(M1.MessageParts, filelist.Strings[i]); ?


 
Reindeer Moss Eater ©   (2008-05-29 10:53) [15]

что я имею ввиду я уже сказал


 
Palladin ©   (2008-05-29 11:00) [16]

ShowMessage(IntToStr(M1.MessageParts.Count)) сколько показывает?


 
Alex Ford   (2008-05-29 11:07) [17]

Совсем запутался :(


//Добавим файлы
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
   FileList:= TStringList.Create;
 if opendialog1.Execute then
 begin
   filelist.Add(pchar(opendialog1.FileName));
   listbox2.Items.AddStrings(filelist);
 //    edit1.Text:= opendialog1.FileName;
 ShowMessage(IntToStr(M1.MessageParts.Count))

 end;
end;


//Отправим
...........
...........
...........
      TIdAttachment.Create(M1.MessageParts, filelist.Strings[i]));
...........
...........
...........




 
ANB   (2008-05-29 11:11) [18]

     Attach_Count := High(AttachList);
     for Attach_No := 0 to Attach_Count do begin
       AttachFileName := AttachList[Attach_No].FileName;
       AttachBody := AttachList[Attach_No].Body;
       if (Length(AttachBody) > 0) then begin
         // Присоединим письмо
         IdAttachment := TIdAttachmentMemory.Create(Msg.MessageParts);
         IdAttachment.FileName := AttachFileName;
         Stream := IdAttachment.OpenLoadStream;
         try
           Stream.Write(AttachBody[1], Length(AttachBody));
         finally
           IdAttachment.CloseLoadStream;
         end;
       end;
     end;

Примерно так. Это из строк вложения добавляются. Легко переделать на сразу из файлов.


 
Palladin ©   (2008-05-29 11:12) [19]

бредишь? ну вот на кой нужно показывать сколько частей в сообщении, когда ты туда еще ничего не добавил?


> filelist.Add(pchar(opendialog1.FileName));

это что еще за бред? зачем приводить к PChar? Разве от тебя PChar требуется?


> listbox2.Items.AddStrings(filelist);

а это что за бред? ради одной строчки создавать целый объект TStringList ? с дуба рухнул? listbox2.Items.Add(opendialog1.FileName) религия не позволяет?


> ShowMessage(IntToStr(M1.MessageParts.Count))

и каким попом интересно на добавлении в listbox2 строки скажется изменение количества элементов в M1.MessageParts?


 
Alex Ford   (2008-05-29 11:21) [20]

на счет ShowMessage(IntToStr(M1.MessageParts.Count)) сколько показывает? - то это не моё.

на счет добавления строк в листбок не проблема. Просто так соображал исходя того, что в аттачменте файлы указываются в виде объекта стринглиста. Потому и написал.

Без Pchar у меня фиг его знает, почему то не отправляется......

А вот пример
Attach_Count := High(AttachList);
    for Attach_No := 0 to Attach_Count do begin
      AttachFileName := AttachList[Attach_No].FileName;
      AttachBody := AttachList[Attach_No].Body;
      if (Length(AttachBody) > 0) then begin
        // Присоединим письмо
        IdAttachment := TIdAttachmentMemory.Create(Msg.MessageParts);
        IdAttachment.FileName := AttachFileName;
        Stream := IdAttachment.OpenLoadStream;
        try
          Stream.Write(AttachBody[1], Length(AttachBody));
        finally
          IdAttachment.CloseLoadStream;
        end;
      end;
    end;


Я не понял.
Меня заинтересовало сейчас одно. Если в аттачмент можно прописал одной строкой TIdAttachment.Create(Msg.MessageParts,"c:\file.zip");.
Тогда как можно указать два файла, для примера, вместо одного файла как в этом примере?


 
Palladin ©   (2008-05-29 11:25) [21]


> Alex Ford   (29.05.08 11:21) [20]
> на счет ShowMessage(IntToStr(M1.MessageParts.Count)) сколько
> показывает? - то это не моё.

и что? зато мое. я спросил сколько оно показывает после выполнения цикла

for i:=0 to filelist.Count-1 do
  TIdAttachment.Create(M1.MessageParts, filelist.Strings[i]);

это раз, два, судя по названию переменной и тому что ты привел, у тебя в filelist всегда одна строка. всегда с последним добавленным файлом. более того, filelist скорее всего является полем формы и ты при каждом добавлении нового файла в listbox2 теряешь ссылку на объект...

короче, не удержусь, скажу, за метлой...


 
Alex Ford   (2008-05-29 11:30) [22]

Ну извини.
В цикле оно показывает 0.

FileList - это Tstringlist.
В FileList добавляю файлы так: filelist.Add(opendialog1.FileName);


 
Alex Ford   (2008-05-29 11:31) [23]

ребята, не надо за метлой..... :(


 
Palladin ©   (2008-05-29 11:33) [24]


> В цикле оно показывает 0.

я непонятно написал? не в цикле, а после цикла. ну да ладно. это уже не важно. можешь не смотреть. можешь внятно объяснить, зачем ты в событии кнопки SpeedButton1Click делаешь FileList:= TStringList.Create; ?


 
Alex Ford   (2008-05-29 11:36) [25]

Это FileList:= TStringList.Create?
Потому, что так получается первых два одинаковых имени файла.


 
Palladin ©   (2008-05-29 11:39) [26]

:) даже так... ну да... так оно... ты три файла не пробовал добавлять, с твоим кодом в listbox2 получилось бы

первый файл
первый файл
второй файл
первый файл
второй файл
третий файл


ты вообще представляешь что делает эта строчка?


 
Alex Ford   (2008-05-29 11:46) [27]

Посмотрел фото - ну прямо в душу лезет! Сразу видно что МАСТЕР! Приятный человек!

И так....
Пробовал добавлять 3-4 файла. Так и выходит.

Представляю, Тимур.
Создается объект - спикок типа TstringList.
List:= TstringList.Create;
List.Add("1");
List.Add("2");
List.Add("3");
List.Free//уничтожаем когда не нужен.

так ведь?

Я так соображал, что аттачемент обладает свойством TStringList. Потому и воспользовался им.


 
Плохиш ©   (2008-05-29 11:51) [28]


> Alex Ford   (29.05.08 11:46) [27]

Стоит сначала разобраться с логикой хранения выбранных имён файла, а уж потом вложения создавать...


 
Palladin ©   (2008-05-29 11:52) [29]

понимаешь, твоя логика порочна. что на самом деле происходит.

1. нажимается кнопка
1.1 создается экземпляр FilesList - пустой, свежесозданный, ничем не заполненный, ссылка на него сохраняется в поле формы, старая ссылка - теряется, объект содержащий добавленные строки теряется
1.2 пользователю показывается диалог и в случае успешного определения с файлом, он добавляется в FilesList, теперь FilesList у нас содержит один файл, ну и попутно зачем-то добавляется в listbox2 все содержимое FilesList

2. если кнопка нажимается еще раз идем на 1.1 и понимает что же происходит в FilesList

3. наступает время Ч когда нужно отправить файлы, так как у нас в FilesList всего лишь один файл, последневыбранный, он и отправляется. никакой информации о предыдущих файлах в нем не содержится. если ты не понял почему, медитируй над пунктом 1.1


 
Плохиш ©   (2008-05-29 11:55) [30]


> Alex Ford   (29.05.08 11:07) [17]
> Совсем запутался :(
>
>
> //Добавим файлы
> procedure TForm1.SpeedButton1Click(Sender: TObject);
> begin
>    FileList:= TStringList.Create;
>  if opendialog1.Execute then
>  begin
>    filelist.Add(pchar(opendialog1.FileName));
>    listbox2.Items.AddStrings(filelist);>  //    edit1.Text:= opendialog1.FileName;
>  ShowMessage(IntToStr(M1.MessageParts.Count))
>
>  end;
> end;

Маразм сплошной, и FileList, и listbox2, добавление строк... Маразм, голова у тебя для чего? Ешь ты туда что ли только?

PS. Объясни, что делает выделенная строка, может тогда поймёшь...


 
Плохиш ©   (2008-05-29 12:02) [31]


> Palladin ©   (29.05.08 11:52) [29]

Хм, хотел начать из далека, но раз уж ты ему всё разжевал... :-)


 
Palladin ©   (2008-05-29 12:05) [32]


> Плохиш ©   (29.05.08 12:02) [31]

я? разжевал? я лишь показал, что он делает, раз он сам понять не может, что же он делает... люблю критиковать, знаешь ли... :)

ему мое изображение в душу еще залезло зачем то... так"то, у изображения прямых указаний куда"то лазить нет... :)


 
Alex Ford   (2008-05-29 12:13) [33]

1. Мараз - не маразм, а каждый думает по своему. И учится на ошибках как своих так и чужих.
2. Критика приветсвуется, так как это заставляет думать. (для меня)
3. Изображение в душу залезло потому,что человек понравился
3.1. Внешне
3.2. Старается помочь.

p.s. Я же не в личную жизнь лезу. А просто внимание на человека обратил

вот так.


 
Alex Ford   (2008-05-29 12:16) [34]

Забыл добавить, что если использовать

TIdAttachment.Create(M1.MessageParts, listbox2.Items[0]);
то работает, т.е. отсылается первый добавленный файл.
В цикле не получается, так как проявляется выше-выше описанная ситуация :(


 
Palladin ©   (2008-05-29 12:30) [35]


> 2. Критика приветсвуется, так как это заставляет думать.
>  (для меня)

ну и какие мысли"то в голову пришли? я же все объяснил, что происходит. тебе осталось лишь изменить порочные детали происходящего.


 
Alex Ford   (2008-05-29 12:38) [36]

Как на счет этого:

procedure TForm1.FormCreate(Sender: TObject);
begin
 FileList:= TStringList.Create;
end;


TIdAttachment.Create(M1.MessageParts, FileList.Strings[i]);


 
Alex Ford   (2008-05-29 12:39) [37]

Извиняй, пропустил это


procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
 if opendialog1.Execute then
 begin
   filelist.Add(opendialog1.FileName);
 end;


 
Palladin ©   (2008-05-29 12:44) [38]

а почему ты спрашиваешь у меня? результат выполнения, ответит куда более красноречивей...


 
Alex Ford   (2008-05-29 12:48) [39]

Разобрался! заработало!

При создани  формы создал StringList
При добавлени и файлов Opendialog1 добавляем его в список
Stringlist.Add(opendialog1.filename)

При отправке перебрал все имена в списке


      for i:=0 to FileList.Count-1 do
      TIdAttachment.Create(M1.MessageParts, FileList.Strings[i]);


Блин, а форум огромный получился.....

Спасибо Palladin!!!!!!!!!!!



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

Текущий архив: 2008.06.22;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.015 c
2-1211793123
123-ий
2008-05-26 13:12
2008.06.22
Parameter not found


3-1200387283
Андрей Пл
2008-01-15 11:54
2008.06.22
Сравнение дат в InterBase


3-1200551154
saNat
2008-01-17 09:25
2008.06.22
Ошибка в запросе с парметром: DBQuery: Field Table_a2 not found


15-1210173184
koha
2008-05-07 19:13
2008.06.22
Как поднять игровой автомат на Linux


15-1210087838
dr_creigan
2008-05-06 19:30
2008.06.22
роды слов.......((((