Форум: "Начинающим";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];
Внизidsmtp отправка письма Найти похожие ветки
← →
Алексей Филонович (2006-12-07 12:59) [0]Есть листбокс,там список е-мэйл адресов сотрудников нашей компинии,
внутри своя сеть и у каждого есть свой внутрисетевой е-мэйл
суть в том чтобы вовремя оповещать всех о каких то изменениях,для этого было решено сделать рассылку по ящикам.
У меня возникли проблемы,помогите решить.
привожу сделанный код:
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;
в моем понятии данный алгоритм должен работать следующим образом:
цикл по адресам из листбокса,далее отправка письма и так повторение пока не закончаться адреса.
что я делаю не так
← →
Max Zyuzin © (2006-12-07 13:52) [1]>Алексей Филонович (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;
← →
Max Zyuzin © (2006-12-07 13:55) [2]Возможно не нужно коннектится каждый раз... перед отправкой. очередного письма.
А вообще проще создать группу на самом сервере и рассылать группе. Программы вообще не понадобится
← →
Рамиль © (2006-12-07 14:15) [3]
> внутри своя сеть и у каждого есть свой внутрисетевой е-мэйл
А зачем решать задачу через одно место? Варианты
1. Создать группу рассылки в почтовом клиенте.
2. Создать группу рассылки на сервере.
← →
iXT (2006-12-07 14:20) [4]
> в моем понятии данный алгоритм должен работать следующим
> образом:
> цикл по адресам из листбокса,далее отправка письма и так
> повторение пока не закончаться адреса.
Не верно - На сервер уйдет одно сообщение! Никаких тут циклов нет!
← →
iXT (2006-12-07 15:35) [5]Пардон, вообще ничего не уйдет.
2 Max Zyuzin © (07.12.06 13:52) [1] [2]
Вы уверены в рациональности этого?
Я бы предложил:
Message.Clear; (не видно откуда оно берется)
for i :=0 to Listbox.Item.Count - 1 do
Message.Recipients.Add(...
← →
Max Zyuzin © (2006-12-07 16:19) [6]>iXT (07.12.06 15:35) [5]
Нет не уверен, по этому я в том посте 2-й абзац и написал
← →
iXT (2006-12-07 16:32) [7]
> Возможно не нужно коннектится каждый раз... перед отправкой.
> очередного письма.
Этого тоже касается!
> А вообще проще создать группу на самом сервере и рассылать
> группе. Программы вообще не понадобится
Это я не рассматривал! Вернее не считаю. Это уже не Delphi
P.S.
Давайте возможность автору самому найти свои ошибки, хоня ИМХО.
← →
Max Zyuzin © (2006-12-08 08:50) [8]>iXT (07.12.06 16:32) [7]
>Это я не рассматривал! Вернее не считаю. Это уже не Delphi
Это не дельфи, согласен, зато эффективнее значительно :)
← →
Алексей Филонович (2006-12-08 16:25) [9]нашел,разобрался
подскажите только куда вставить прогрессбар чтобы он показывал процесс отправки писем?
Заранее благодарю.
А.Ф.
← →
Anatoly Podgoretsky © (2006-12-08 16:32) [10]> Алексей Филонович (08.12.2006 16:25:09) [9]
На форму
← →
iXT (2006-12-08 16:32) [11]
> Алексей Филонович (08.12.06 16:25) [9]
Зачем???
повторяю, достаточно одного письма со списком получателей!
А TProgressBar Ставится на форму (или др. некоторые визуальные компоненты).
← →
Алексей Филонович (2006-12-08 16:39) [12]достаточно,но у меня так:
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;
работает нормально,только интересно что быстрей работает,как у меня или предложенный вами вариант?
насчет прогрессбара я про код,куда в этих строчках вставить его
← →
iXT (2006-12-08 16:53) [13]
> достаточно,но у меня так:
А почему?
> for i := 0 to flatlistbox1.Items.Count-1 do
> begin
> Messages.Recipients.EMailAddresses :=flatlistbox1.Items.
> Strings[i];
> IdSMTP1.Connect();
Если SMTP сервер один, то зачем каждый раз к нему присоединяться?
> работает нормально,только интересно что быстрей работает,
> как у меня или предложенный вами вариант?
К гадалке не ходи :)
> насчет прогрессбара я про код,куда в этих строчках вставить
> его
Очевидно что после отправки сообщения
← →
Max Zyuzin © (2006-12-08 16:53) [14]>Алексей Филонович (08.12.06 16:39) [12]
Предложеный нами вариант работает значительно быстрее... прямо пропорционально количеству адресатов :)
← →
Anatoly Podgoretsky © (2006-12-08 16:55) [15]> Алексей Филонович (08.12.2006 16:39:12) [12]
Быстрее всего работает список рассылки на сервере, потом список на клиенте и хуже всего рассылка по списку.
← →
Anatoly Podgoretsky © (2006-12-08 16:56) [16]> iXT (08.12.2006 16:53:13) [13]
> Очевидно что после отправки сообщения
А можно до, зависит от психологии, главное внутри цикла.
← →
iXT (2006-12-08 16:58) [17]
> Anatoly Podgoretsky © (08.12.06 16:55) [15]
Ну ему же придется тогда и сервер изучать :) Тут предлагали, даже не отреагировал.
← →
Алексей Филонович (2006-12-08 17:04) [18]Быстрее всего работает список рассылки на сервере
Спасибо.Работает значительно быстрее!!!
← →
Anatoly Podgoretsky © (2006-12-08 18:54) [19]> iXT (08.12.2006 16:58:17) [17]
Чего изучать, как в отдельной строчке ввести емайл?
Неужели это не подъемно?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.043 c