Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рассылка писем 
V
    Опции темы
dinja3
Дата 1.4.2013, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 1.4.2013

Репутация: нет
Всего: нет



Добрый день, помогите пожалуйста решить проблему с рассылкой писем.

У меня на 1-ой форме есть ComboBox, а на 2-ой форме таблица из базы данных.

В таблице 2 столбца: Название группы, E-mail получателя.

Мне надо сделать так, что бы если в ComboBox-е выбираем или пишем "Лётчики" (группа), то он бы проверял данные из таблицы, если есть, то отправлять. Вот к примеру в таблице в группе "Лётчики" учатся 20 человек, значит он должен отправлять 20-и людям.

Я понимаю, что надо писать цикл, но у меня не получается.

Вот код для отправки одному человеку без цикла

Код

procedure TForm8.Button1Click(Sender: TObject);
var i:Integer;
begin
  IdSMTP1.Port:=25;
  IdSMTP1.Host:='smtp.mail.ru';
  IdSMTP1.Connect(5000);
  IdSMTP1.AuthenticationType:=atLogin;
  IdSMTP1.Username:='username';
  IdSMTP1.Password:='password';
  if IdSMTP1.Connected=true then
    begin
      ShowMessage('connected');
      IdMessage1.Clear;
      IdMessage1.Subject:=ComboBox1.Text;
      IdMessage1.Recipients.EMailAddresses:='[email protected]';
          end;
      IdMessage1.From.Address:='[email protected]';
      IdMessage1.Body.Text:=Memo1.Text;
      IdMessage1.From.Name:='Mail';
      IdSMTP1.Send(IdMessage1);
    end;
  IdSMTP1.Disconnect;
end;


Он успешно отправляет, то есть проблем нету.

А вот код с циклом который я пытался написать

Код

procedure TForm8.Button1Click(Sender: TObject);
var i:Integer;
begin
  IdSMTP1.Port:=25;
  IdSMTP1.Host:='smtp.mail.ru';
  IdSMTP1.Connect(5000);
  IdSMTP1.AuthenticationType:=atLogin;
  IdSMTP1.Username:='username';
  IdSMTP1.Password:='password';
  if IdSMTP1.Connected=true then
    begin
      ShowMessage('connected');
      IdMessage1.Clear;
      IdMessage1.Subject:=ComboBox1.Text;
        for i:=1 to Polu4atelj.Table1.RecordCount do
          begin
            Polu4atelj.Table1.RecNo:=i;
            if ComboBox2.Text=Polu4atelj.Table1.FieldValues['Grupa'] then
      IdMessage1.Recipients.EMailAddresses:=Polu4atelj.Table1.FieldValues['Email_name']; //то есть сюда должны попадать те значения кого совпали из ComboBox и таблицы
          end;
      IdMessage1.From.Address:='[email protected]';
      IdMessage1.Body.Text:=Memo1.Text;
      IdMessage1.From.Name:='Mail';
      IdSMTP1.Send(IdMessage1);
    end;
  IdSMTP1.Disconnect;
end;


Но вся проблема в том, что он отправляет только последнему у кого совпадает запись с ComboBox-ом. То есть он пробегает весь столбец и у кого последнего запись совпадает, тому он и отправляет.

Прошу подкорректировать код или написать другой, если этот не подходит. Я отмучился с этим циклом, у меня уже нет идей. Прошу помочь, кто в этом разбирается.
PM MAIL   Вверх
northener
Дата 1.4.2013, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: нет
Всего: 20



Цитата(dinja3 @  1.4.2013,  18:03 Найти цитируемый пост)
IdSMTP1.Send(IdMessage1);

Эта строка должна быть внутри цикла, а не снаружи.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
dinja3
Дата 1.4.2013, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 1.4.2013

Репутация: нет
Всего: нет



Спасибо но проблема, ещё не решена, теперь он отправляет 20 раз на E-mail, который указан у последнего учащегося который совпадает с группой.

Код

procedure TForm8.Button1Click(Sender: TObject);
var i:Integer;
begin
  IdSMTP1.Port:=25;
  IdSMTP1.Host:='smtp.mail.ru';
  IdSMTP1.Connect(5000);
  IdSMTP1.AuthenticationType:=atLogin;
  IdSMTP1.Username:='username';
  IdSMTP1.Password:='password';
  if IdSMTP1.Connected=true then
    begin
      ShowMessage('connected');
      IdMessage1.Clear;
      IdMessage1.Subject:=ComboBox1.Text;
      IdMessage1.Recipients.EMailAddresses:=Polu4atelj.Table1.FieldValues['Email_name']; //то есть сюда должны попадать те значения кого совпали из ComboBox и таблицы
      IdMessage1.From.Address:='[email protected]';
      IdMessage1.Body.Text:=Memo1.Text;
      IdMessage1.From.Name:='Mail';
      for i:=1 to Polu4atelj.Table1.RecordCount do
          begin
            Polu4atelj.Table1.RecNo:=i;
            if ComboBox2.Text=Polu4atelj.Table1.FieldValues['Grupa'] then
            IdSMTP1.Send(IdMessage1);
          end;
    end;
  IdSMTP1.Disconnect;
end;


Это сообщение отредактировал(а) dinja3 - 1.4.2013, 18:48
PM MAIL   Вверх
dinja3
Дата 1.4.2013, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 1.4.2013

Репутация: нет
Всего: нет



Спасибо northener за подсказку, до меня хоть дошло как проблему решить

Проблему решил

Код

procedure TForm8.Button1Click(Sender: TObject);
var i:Integer;
begin
  IdSMTP1.Port:=25;
  IdSMTP1.Host:='smtp.mail.ru';
  IdSMTP1.Connect(5000);
  IdSMTP1.AuthenticationType:=atLogin;
  IdSMTP1.Username:='username';
  IdSMTP1.Password:='password';
  if IdSMTP1.Connected=true then
  for i:=0 to Polu4atelj.Table1.RecordCount -1 do
    begin
      IdMessage1.Clear;
      IdMessage1.Subject:=ComboBox1.Text;
      IdMessage1.Recipients.EMailAddresses:=Polu4atelj.Table1.FieldValues['Email_name'];
      IdMessage1.From.Address:='[email protected]';
      IdMessage1.Body.Text:=Memo1.Text;
      IdMessage1.From.Name:='Mail';
      Polu4atelj.Table1.RecNo:=i;
      if ComboBox2.Text=Polu4atelj.Table1.FieldValues['Grupa'] then
        IdSMTP1.Send(IdMessage1);
    end;
  IdSMTP1.Disconnect;
end;


Это сообщение отредактировал(а) dinja3 - 1.4.2013, 21:29
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0429 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.