![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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;