Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.03.2009, 23:22
joomler joomler вне форума
Новичок
 
Регистрация: 11.10.2008
Сообщения: 88
Репутация: 10
По умолчанию Как отправить письмо сразу нескольким пользователям из базы данных?

Доброго времени суток!

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

Ни разу с этим не сталкивался, но мое видение решения этой проблемы такое:
-нужно из поля "e-mail" как то подставлять адреса скрипту отправки. Т.Е. берем поле "e-mail" , из него вытаскиваем 1ю строку с адресом и подставляем ее скрипту отправки. Далее берем 2ю строку и подставляем скрипту отправки и т.д.

Вот может что то типа этого? или сохранять в текстовый файл и его потом подставлять?
Ответить с цитированием
  #2  
Старый 20.03.2009, 00:33
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Берешь TIdSMTP и в письме указываешь все адреса а поле To.
Хотя если адресов реально много, то лучше все-таки разбить на несколько писем...
Ответить с цитированием
  #3  
Старый 20.03.2009, 00:56
joomler joomler вне форума
Новичок
 
Регистрация: 11.10.2008
Сообщения: 88
Репутация: 10
По умолчанию

Это понятно что вставляешь все адреса, а нужно чтоб программно все вставлялось как вот это организовать?
И нашел исходник как отправить простое письмо сдесь на сайте и все работало вчера а сегодня запускаю не работает пишет что нужна аутентификация хотя все параметры такие же как и вчера , в чем зе может быть проблема?
Ответить с цитированием
  #4  
Старый 21.03.2009, 11:34
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Вы покажите код, как вы отправку делаете. Пока только ваши впечатления, а этого согласитесь - маловато.
Я писал почтового робота на компонентах TIdSMTP. Отлично работает уже 2 года.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 21.03.2009, 11:45
joomler joomler вне форума
Новичок
 
Регистрация: 11.10.2008
Сообщения: 88
Репутация: 10
По умолчанию

Вот код отправки:
Код:
begin
   IdSMTP1.Host:='smtp.mail.ru'; // сервер исходящей почты (SMTP)
   IdSMTP1.Port:=25;    // порт SMTP сервера
   IdSMTP1.Username:='test@mail.ru';  // ваш логин
   IdSMTP1.Password:='test';     // ваш пароль
   IdSMTP1.Authenticate;
       with IdMessage1 do
               begin
               Body.Assign(Memo1.Lines);    // текст письма
               From.Text := 'test@mail.ru'; //  ваш e-mail адрес
               Recipients.EMailAddresses := 'test@list.ru';     // адрес получателя
               Subject := 'test';  // тема сообщения
               end;

IdSMTP1.Connect;
       try
         showmessage('Conneted');
         IdSMTP1.Send(IdMessage1);
       finally
         IdSMTP1.Disconnect;
       end;
end;
Ответить с цитированием
  #6  
Старый 21.03.2009, 12:06
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Вы под D7 пишите? Я уже давно переписал все под D2007, а там эти библиотеки несколько изменились. Насколько я помню, одним из подводных камешков я вилось, то что необходимо проверять наличие коннекта, независимо то того 1 раз вы подключаетесь или 10, и в случае неудачи первой попытки делать это вторично.
у меня это реализовано так:
Код:
TryCount := 0; //Организуем цикл с нужным количеством попыток отправки в моем случае 3
    repeat
     try
      if not SMTP.Connected then SMTP.Connect; // Проверяем имеющееся подключение и если его нет подключаем
      SMTP.Send(Mail); // Отсылаем сообщение
      Mail.Clear; // В новой версии библиотек TIdMessage оформлено как отдельный контрол. У меня Mail: TIdMessage
      SMTP.Disconnect; // Отключаем соединение по ненадобности.
      Break; // поскольку все прошло удачно, выходим из цикла
     except // неудача соединения
      LogMessage('Ошибка подключения к SMTP-серверу. Повтор через 5 сек.', mtError); //Это моя процедура для регистрации событий в журнале
      StartTime := GetTickCount;  //Организуем цикл ожидания
      repeat
       Application.ProcessMessages; // Что-бы приложение не "замерзло"  в процессе ожидания
      until GetTickCount - StartTime > 5 * OneSec; // Собственно ждем 5 секунд
     end;
     Inc(TryCount); 
    until TryCount = 3; //Если количество попыток отправки больше 3 прекращаем попытки.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 21.03.2009 в 12:41.
Ответить с цитированием
  #7  
Старый 21.03.2009, 12:27
joomler joomler вне форума
Новичок
 
Регистрация: 11.10.2008
Сообщения: 88
Репутация: 10
По умолчанию

Да у меня д7
А не могли бы Вы с коментариями написать?
Ответить с цитированием
  #8  
Старый 21.03.2009, 12:42
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Поправил сообщение, теперь понятнее?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 21.03.2009, 12:46
joomler joomler вне форума
Новичок
 
Регистрация: 11.10.2008
Сообщения: 88
Репутация: 10
По умолчанию

да на много )) я новичек в этом, попробую Вашим способом, но почему же у меня работало а на след день уже не работает, какие могут быть причины?


да и ваш код нужно писать после

Код:
 IdSMTP1.Host:='smtp.mail.ru'; // сервер исходящей почты (SMTP)
   IdSMTP1.Port:=25;    // порт SMTP сервера
   IdSMTP1.Username:='test@mail.ru';  // ваш логин
   IdSMTP1.Password:='test';     // ваш пароль
   IdSMTP1.Authenticate;
       with IdMessage1 do
               begin
               Body.Assign(Memo1.Lines);    // текст письма
               From.Text := 'test@mail.ru'; //  ваш e-mail адрес
               Recipients.EMailAddresses := 'test@list.ru';     // адрес получателя
               Subject := 'test';  // тема сообщения
               end;

//Ваш код
TryCount := 0; //Организуем цикл с нужным количеством попыток отправки в моем случае 3
    repeat
     try
      if not SMTP.Connected then SMTP.Connect; // Проверяем имеющееся подключение и если его нет подключаем
      SMTP.Send(Mail); // Отсылаем сообщение
      Mail.Clear; // В новой версии библиотек TIdMessage оформлено как отдельный контрол. У меня Mail: TIdMessage
      SMTP.Disconnect; // Отключаем соединение по ненадобности.
      Break; // поскольку все прошло удачно, выходим из цикла
     except // неудача соединения
      LogMessage('Ошибка подключения к SMTP-серверу. Повтор через 5 сек.', mtError); //Это моя процедура для регистрации событий в журнале
      StartTime := GetTickCount;  //Организуем цикл ожидания
      repeat
       Application.ProcessMessages; // Что-бы приложение не "замерзло"  в процессе ожидания
      until GetTickCount - StartTime > 5 * OneSec; // Собственно ждем 5 секунд
     end;
     Inc(TryCount); 
    until TryCount = 3; //Если количество попыток отправки больше 3 прекращаем попытки.


Так правильно будет?

Последний раз редактировалось joomler, 21.03.2009 в 12:50.
Ответить с цитированием
  #10  
Старый 21.03.2009, 12:54
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Могу предположить, что по каким-то причинам почтовый сервер посчитал, что вы незакрыли соединение. Если у вас выделенка с постоянным IP, и вы экспериментируете с протоколами передачи данных, то такое вполне возможно.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #11  
Старый 21.03.2009, 13:03
joomler joomler вне форума
Новичок
 
Регистрация: 11.10.2008
Сообщения: 88
Репутация: 10
По умолчанию

показывалась ошибка мол без аутентификации отправить нельзя,

а Вы код посмотрели? так должно быть?
Ответить с цитированием
  #12  
Старый 21.03.2009, 13:20
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Кстати, а нафига вы вообще для отправки сообщение применяете логин и пароль? Он нужен для приема, и в очень редких случаях для отправки. Насколько я в курсе на mail.ru логиниться нет необходимости для отправки почты.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #13  
Старый 21.03.2009, 13:40
joomler joomler вне форума
Новичок
 
Регистрация: 11.10.2008
Сообщения: 88
Репутация: 10
По умолчанию

а это когда искал как работать с indy нашел этот код, я ведь начинающий и вот думал что так и должно быть,

если вам не трудно поправьте мой код выше без и логина и пароля
Ответить с цитированием
  #14  
Старый 21.03.2009, 16:51
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

D7 у меня нет, потому проверить без изменений ваш код неполучиться, но наверняка надо просто убрать вот эти три строчки:
Код:
   IdSMTP1.Username:='test@mail.ru';  // ваш логин
   IdSMTP1.Password:='test';     // ваш пароль
   IdSMTP1.Authenticate;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #15  
Старый 21.03.2009, 19:03
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Заинтриговали вы меня этим почтовым серевером. Поэкспериментировал, результаты пока неочень понятные. Похоже, что для отправки туда почты все-же необходима аутентификация, но если вас туда пустили, то начинается сессия и пока сессия на сервере не закончится вам туда можно отправлять письма без пороля. Сколько длится сессия фиг его знает, но что интересно разрыв соединения невлияет на сессию.
В свете всего вышеизложенного я предполагаю следующее развитие событий:
Днем ранее вы вошли на mail.ru, сессия началась, потом программой вы отправляли почту без проблем т.к. сессия длилась. На следующий день вы уже не входили на mail.ru и сразу пробовали отправить прогой письма, но сессия к тому времени уже закончилась и начались непонятки.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:51.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025