Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вложение электронной почты [D7, XP]


Страницы:   1 2

Alex Ford ©   (2008-05-29 10:14:00) 

Здрасте!

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

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


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

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

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

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


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


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

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


Palladin   (2008-05-29 12:44:00) [2]

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


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

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


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


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

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

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


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


Palladin   (2008-05-29 12:30:00) [5]


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

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


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

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

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


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

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

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

вот так.


Palladin   (2008-05-29 12:05:00) [8]


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

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

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


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


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

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


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


> 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. Объясни, что делает выделенная строка, может тогда поймёшь...


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

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

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

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

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


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


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

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


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

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

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

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

так ведь?

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


Palladin   (2008-05-29 11:39:00) [14]

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

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


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


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

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


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


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

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


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

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


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

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

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


Palladin   (2008-05-29 11:25:00) [19]


> 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:21:00) [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');.
Тогда как можно указать два файла, для примера, вместо одного файла как в этом примере?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо