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

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

idsmtp отправка письма [D6, XP]


Алексей Филонович ©   (2006-12-07 12:59:00) 

Есть листбокс,там список е-мэйл адресов сотрудников нашей компинии,
внутри своя сеть и у каждого есть свой внутрисетевой е-мэйл

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

привожу сделанный код:
button1.onclick;
var
i:integer;
begin
Messages.Body.Add(memo1.Text);
Messages.From.Text := 'secr@home.net';
Messages.Subject := edit1.Text;
Messages.contentType:= 'text/plain';
Messages.CharSet:= 'Windows-1251';
IdSMTP1.Port:=25;
IdSMTP1.Host := 'home.net';
IdSMTP1.AuthenticationType := atLogin;
IdSMTP1.UserId := '...';
IdSMTP1.Password := '...';
while listbox1.Items.Count>i do
Messages.Recipients.EMailAddresses :=listbox1.Items.Strings[i];
IdSMTP1.Connect();
If IdSMTP1.Connected then
Begin
IdSMTP1.Send(Messages);
End;
IdSMTP1.Disconnect;

в моем понятии данный алгоритм должен работать следующим образом:
цикл по адресам из листбокса,далее отправка письма и так повторение пока не закончаться адреса.
что я делаю не так


Anatoly Podgoretsky   (2006-12-08 18:54:00) [1]

> iXT  (08.12.2006 16:58:17)  [17]

Чего изучать, как в отдельной строчке ввести емайл?
Неужели это не подъемно?


Алексей Филонович   (2006-12-08 17:04:00) [2]

Быстрее всего работает список рассылки на сервере

Спасибо.Работает значительно быстрее!!!


iXT   (2006-12-08 16:58:00) [3]


> Anatoly Podgoretsky ©   (08.12.06 16:55) [15]

Ну ему же придется тогда и сервер изучать :) Тут предлагали, даже не отреагировал.


Anatoly Podgoretsky   (2006-12-08 16:56:00) [4]

> iXT  (08.12.2006 16:53:13)  [13]

> Очевидно что после отправки сообщения

А можно до, зависит от психологии, главное внутри цикла.


Anatoly Podgoretsky   (2006-12-08 16:55:00) [5]

> Алексей Филонович  (08.12.2006 16:39:12)  [12]

Быстрее всего работает список рассылки на сервере, потом список на клиенте и хуже всего рассылка по списку.


Max Zyuzin   (2006-12-08 16:53:00) [6]

>Алексей Филонович   (08.12.06 16:39) [12]
Предложеный нами вариант работает значительно быстрее... прямо пропорционально количеству адресатов :)


iXT   (2006-12-08 16:53:00) [7]


> достаточно,но у меня так:


А почему?
> for i := 0 to flatlistbox1.Items.Count-1 do
> begin
>  Messages.Recipients.EMailAddresses :=flatlistbox1.Items.
> Strings[i];
>  IdSMTP1.Connect();

Если SMTP сервер один, то зачем каждый раз к нему присоединяться?

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

К гадалке не ходи :)

> насчет прогрессбара я про код,куда в этих строчках вставить
> его

Очевидно что после отправки сообщения


Алексей Филонович   (2006-12-08 16:39:00) [8]

достаточно,но у меня так:
for i := 0 to flatlistbox1.Items.Count-1 do
begin
 Messages.Recipients.EMailAddresses :=flatlistbox1.Items.Strings[i];
 IdSMTP1.Connect();
  If IdSMTP1.Connected then  IdSMTP1.Send(Messages);
IdSMTP1.Disconnect;

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

насчет прогрессбара я про код,куда в этих строчках вставить его


Anatoly Podgoretsky   (2006-12-08 16:32:00) [9]

> Алексей Филонович  (08.12.2006 16:25:09)  [9]

На форму


iXT   (2006-12-08 16:32:00) [10]


> Алексей Филонович   (08.12.06 16:25) [9]

Зачем???

повторяю, достаточно одного письма со списком получателей!

А TProgressBar Ставится на форму (или др. некоторые визуальные компоненты).


Алексей Филонович   (2006-12-08 16:25:00) [11]

нашел,разобрался
подскажите только куда вставить прогрессбар чтобы он показывал процесс отправки писем?
Заранее благодарю.
А.Ф.


Max Zyuzin   (2006-12-08 08:50:00) [12]

>iXT   (07.12.06 16:32) [7]
>Это я не рассматривал! Вернее не считаю. Это уже не Delphi
Это не дельфи, согласен, зато эффективнее значительно :)


iXT   (2006-12-07 16:32:00) [13]


> Возможно не нужно коннектится каждый раз... перед отправкой.
>  очередного письма.


Этого тоже касается!


> А вообще проще создать группу на самом сервере и рассылать
> группе. Программы вообще не понадобится

Это я не рассматривал! Вернее не считаю. Это уже не Delphi

P.S.
 Давайте возможность автору самому найти свои ошибки, хоня ИМХО.


Max Zyuzin   (2006-12-07 16:19:00) [14]

>iXT   (07.12.06 15:35) [5]
Нет не уверен, по этому я в том посте 2-й абзац и написал


iXT   (2006-12-07 15:35:00) [15]

Пардон, вообще ничего не уйдет.

2 Max Zyuzin ©   (07.12.06 13:52) [1] [2]
 Вы уверены в рациональности этого?

Я бы предложил:
Message.Clear; (не видно откуда оно берется)
for i :=0 to Listbox.Item.Count - 1 do
 Message.Recipients.Add(...


iXT   (2006-12-07 14:20:00) [16]


> в моем понятии данный алгоритм должен работать следующим
> образом:
> цикл по адресам из листбокса,далее отправка письма и так
> повторение пока не закончаться адреса.

Не верно - На сервер уйдет одно сообщение! Никаких тут циклов нет!


Рамиль   (2006-12-07 14:15:00) [17]


> внутри своя сеть и у каждого есть свой внутрисетевой е-мэйл

А зачем решать задачу через одно место? Варианты
1. Создать группу рассылки в почтовом клиенте.
2. Создать группу рассылки на сервере.


Max Zyuzin   (2006-12-07 13:55:00) [18]

Возможно не нужно коннектится каждый раз... перед отправкой. очередного письма.

А вообще проще создать группу на самом сервере и рассылать группе. Программы вообще не понадобится


Max Zyuzin   (2006-12-07 13:52:00) [19]

>Алексей Филонович   (07.12.06 12:59)
i := 0;
while listbox1.Items.Count>i do
begin
Messages.Recipients.EMailAddresses :=listbox1.Items.Strings[i];
IdSMTP1.Connect();
If IdSMTP1.Connected then IdSMTP1.Send(Messages);
IdSMTP1.Disconnect;
inc(i);
End;


Наверх

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