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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.043 c
2-1211729588
cyborg
2008-05-25 19:33
2008.06.22
Как отловить момент изменения файла


2-1211620887
Magos
2008-05-24 13:21
2008.06.22
Изменение расстояния между символами в Label.


3-1200847939
Ega23
2008-01-20 19:52
2008.06.22
FB + IBExpert


2-1211887395
MVN
2008-05-27 15:23
2008.06.22
Dialog


2-1211991044
rena
2008-05-28 20:10
2008.06.22
выход из процедуры





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский