![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Доброго времени суток!
![]() И сново нужна помощь в организации отправки письма всем пользователям чьи адреса есть в базе одновременно. Ни разу с этим не сталкивался, но мое видение решения этой проблемы такое: -нужно из поля "e-mail" как то подставлять адреса скрипту отправки. Т.Е. берем поле "e-mail" , из него вытаскиваем 1ю строку с адресом и подставляем ее скрипту отправки. Далее берем 2ю строку и подставляем скрипту отправки и т.д. Вот может что то типа этого? или сохранять в текстовый файл и его потом подставлять? |
#2
|
|||
|
|||
![]() Берешь TIdSMTP и в письме указываешь все адреса а поле To.
Хотя если адресов реально много, то лучше все-таки разбить на несколько писем... |
#3
|
|||
|
|||
![]() Это понятно что вставляешь все адреса, а нужно чтоб программно все вставлялось как вот это организовать?
И нашел исходник как отправить простое письмо сдесь на сайте и все работало вчера а сегодня запускаю не работает пишет что нужна аутентификация хотя все параметры такие же как и вчера , в чем зе может быть проблема? |
#4
|
||||
|
||||
![]() Вы покажите код, как вы отправку делаете. Пока только ваши впечатления, а этого согласитесь - маловато.
Я писал почтового робота на компонентах TIdSMTP. Отлично работает уже 2 года. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
![]() Вот код отправки:
Код:
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
|
||||
|
||||
![]() Вы под 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
|
|||
|
|||
![]() Да у меня д7
А не могли бы Вы с коментариями написать? |
#8
|
||||
|
||||
![]() Поправил сообщение, теперь понятнее?
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#9
|
|||
|
|||
![]() да на много )) я новичек в этом, попробую Вашим способом, но почему же у меня работало а на след день уже не работает, какие могут быть причины?
да и ваш код нужно писать после Код:
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
|
||||
|
||||
![]() Могу предположить, что по каким-то причинам почтовый сервер посчитал, что вы незакрыли соединение. Если у вас выделенка с постоянным IP, и вы экспериментируете с протоколами передачи данных, то такое вполне возможно.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#11
|
|||
|
|||
![]() показывалась ошибка мол без аутентификации отправить нельзя,
а Вы код посмотрели? так должно быть? |
#12
|
||||
|
||||
![]() Кстати, а нафига вы вообще для отправки сообщение применяете логин и пароль? Он нужен для приема, и в очень редких случаях для отправки. Насколько я в курсе на mail.ru логиниться нет необходимости для отправки почты.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#13
|
|||
|
|||
![]() а это когда искал как работать с indy нашел этот код, я ведь начинающий и вот думал что так и должно быть,
если вам не трудно поправьте мой код выше без и логина и пароля |
#14
|
||||
|
||||
![]() D7 у меня нет, потому проверить без изменений ваш код неполучиться, но наверняка надо просто убрать вот эти три строчки:
Код:
IdSMTP1.Username:='test@mail.ru'; // ваш логин IdSMTP1.Password:='test'; // ваш пароль IdSMTP1.Authenticate; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#15
|
||||
|
||||
![]() Заинтриговали вы меня этим почтовым серевером. Поэкспериментировал, результаты пока неочень понятные. Похоже, что для отправки туда почты все-же необходима аутентификация, но если вас туда пустили, то начинается сессия и пока сессия на сервере не закончится вам туда можно отправлять письма без пороля. Сколько длится сессия фиг его знает, но что интересно разрыв соединения невлияет на сессию.
В свете всего вышеизложенного я предполагаю следующее развитие событий: Днем ранее вы вошли на mail.ru, сессия началась, потом программой вы отправляли почту без проблем т.к. сессия длилась. На следующий день вы уже не входили на mail.ru и сразу пробовали отправить прогой письма, но сессия к тому времени уже закончилась и начались непонятки. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |