ymhuk
|
|
« : 30-03-2006 20:21 » |
|
Кто знает как можно автоматически обновлять базу данных (у меня база в Access - использую ADO) по электронной почте. То есть при получении мыла, база должна автоматически обновляться. Нужна любая инфа, ссылки, примеры. Заранее ОГРОМНОЕ СПАСИБО всем желающим помочь.
|
|
|
Записан
|
Знаешь мало - поучись, знаешь много - поделись.
|
|
|
zubr
Гость
|
|
« Ответ #1 : 31-03-2006 03:58 » |
|
Надо делать прогу, которая будет через определенные промежутки времени получать почту, ее анализировать, при получении нужной информации ее обрабатывать и обновлять БД. Для получения почты можно использовать готовые Delphi-компоненты, реализующие протокол POP3, к примеру TIdPOP3.
|
|
|
Записан
|
|
|
|
PooH
Глобальный модератор
Offline
Пол:
... и можно без хлеба!
|
|
« Ответ #2 : 31-03-2006 06:21 » |
|
Узай The Bat (мож и у других клиентов такая фича есть - не знаю). Настрой сортировщика писем на автоматическое сохранение аттача (с перезаписью существуещего файла) или с сохранением и запуском внешней программы.
|
|
|
Записан
|
Удачного всем кодинга! -=x[PooH]x=-
|
|
|
Igel
|
|
« Ответ #3 : 01-04-2006 15:38 » |
|
Так, посмотрим на задачу со стороны. Вырисовывается такая картина: 1. Есть БД и программа работающая с этими данными. 2. Изменения/обновления данных приходят по почте. 2.1. Это либо новые записи - конкретный случай Это "макрос" - который дополняет или изменяет или удаляет записи в БД - общий случай. 2.2. Почтовый клиент может быть любой, следовательно программа, которая работает с БД должна в любом случае получить и переработать данные. 2 варианта: писать надстройки для всех почтовых клиентов самых распространенных или перехватывать почту до клиента.
Что еще? А да , можно сделать в самой программе классическое обновление. А уж как оно идет - через почту или сразу через сайт - не суть важно.
|
|
|
Записан
|
Ёжики, это не только ценные шкурки...
|
|
|
ymhuk
|
|
« Ответ #4 : 03-04-2006 20:04 » |
|
zubr, я понял, что нужно испльзовать протокол POP3, и я знаю как это делать с помощью стандартного для Делфи 5 компонента NMPOP3. Компонентом TIdPOP3 я пробовал пользоваться ("метод нучного тыка"), естественно ничего не получилось, потому что у NMPOP3 и TIdPOP3 разные свойства и функции. Я уже начал подумывать создать второе приложение, которое будет принимать почту и передавать ее основной моей проге. На всякий случай еще раз уточню задачу: клиенты отсылают мне инфу на мыло. Я принимаю почту соответствующую сначала заданной теме письма(например, "обновление"), а затем и содержащимся данным. Ну и затем обновляю данные в базе. Мне обязательно нужно использовать Делфи 7, но я не могу подключить пакет FastNet, содержащий NMPOP3, с которым моя задача была бы уже решена. Я думаю может мне удалить пакет Indy и тогда конфликт исчезнет. PooH, мне нужно чтобы использовалась только моя прога, а идея интересная. Igel, писать надстройки для почтовых клиентов это слишком для курсовой. Ну, а почту в общем перехватывать и не надо. Жду новых идей или просто советов.
|
|
|
Записан
|
Знаешь мало - поучись, знаешь много - поделись.
|
|
|
RomCom
|
|
« Ответ #5 : 04-04-2006 12:19 » |
|
ИМХО Indy получше будет чем FastNet. Если есть возможность скачай и поставь последнию версию Indy, кажется 10 последняя. Там все просто, вот пример приема почты: var CountMsg,i:Integer; begin IdPOP31.Host:='pop.mail.ru'; IdPOP31.Username:='my_login'; IdPOP31.Password:='my_pasword'; IdPOP31.Connect; CountMsg:=IdPOP31.CheckMessages; //количество сообщений в ящике Label1.Caption:=inttostr(CountMsg); for i:=1 to CountMsg do begin IdPOP31.Retrieve(i,IdMessage1); //принимаем сообщение №i //чтото делаем с сообщением в IdMessage1 end; IdPOP31.Disconnect; end;
|
|
« Последнее редактирование: 04-12-2007 21:30 от Алексей1153++ »
|
Записан
|
R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
|
|
|
ymhuk
|
|
« Ответ #6 : 04-04-2006 20:33 » |
|
RomCom, сппасибо попробую.
|
|
|
Записан
|
Знаешь мало - поучись, знаешь много - поделись.
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #7 : 04-04-2006 21:32 » |
|
а в каком виде приходит обновление? что это? новый мдб-файл, который надо целиком заменить? тогда просто настраивается почтовик на сохранение вложений от определённого юзера или с определённой темой в определённую папку, пишется батник, который проверяет эту папку на наличие определённого файла, (разархивирует его, если надо), и заменяет им базу. вызов самого батника прописывайтся в Sheduled Jobs виндов на каждую ночь, например. большинство подобных задач решаются безо всякого программирования в принципе, так и передай своему преподу если данные приходят в виде некоего скрипта или отдельного файла, который надо объединять с существующей базой, а не тупо заменять её, то там правильнее сделать нормальный репликационный механизм. можно взять любой готовый с поддержкой ОДБС и натравить его на присылаемый по почте апдейты. вообще говоря, я бы рекомендовал продублировать темку в ветке общие вопросы или в базах данных, потому что аксцесс ну очень специфичная приблуда, очень тесно интегрированная с теми же почтовыми службами (аутглюк), и вполне вероятно, что там для подобных вещей может быть предусмотрен штатный функционал.
|
|
|
Записан
|
|
|
|
ymhuk
|
|
« Ответ #8 : 06-04-2006 21:25 » |
|
Все всем впасибо прога работает и принимает почту и базу обновляет. Пришлось делать своим способом - через 2 приложения. Но теперь еще одна проблема не сделать прогу отправляющую мыло. Не пойму smtp сервер мне отказывает что-ли. Подскажите который не трубует авторизации.
|
|
|
Записан
|
Знаешь мало - поучись, знаешь много - поделись.
|
|
|
RomCom
|
|
« Ответ #9 : 07-04-2006 00:58 » |
|
По моим наблюдениям сейчас все более менее солидные smtp сервер требуют авторизации. И это гуд. Веление времени, спам и все такое Отправку делаешь через IdSMTP (Indy)?
|
|
|
Записан
|
R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
|
|
|
DemonicAlligator
Гость
|
|
« Ответ #10 : 07-04-2006 10:46 » |
|
Простая консольная программа. Отправляет файлы из определённого каталога скопом на е-mail. Без авторизации. Если требуется авторизация - Indy-компоненты легко позволяют её сделать... program MailSender;
{$APPTYPE CONSOLE}
uses Windows, Classes, SysUtils, IdSMTP, IdMessage;
Const
LogFileName:String='mail.log'; FilesDirName:String='c:\mail\files\'; OutboundDirName:String='c:\mail\outbound\'; FromAddress:String='твой e-mail'; FromHost:String='твой smtp-сервер'; RecipientAddress:String='e-mail получателя'; FromName='Твоё имя';
Var i:Integer; lFile:TextFile; SMTP:TIDSmtp; Msg:TIdMessage; fileList:TStringList;
Function ToAnsi(iStr:String):String; Var pBuf:PChar; Begin pBuf:=AllocMem(length(iStr)+1); OemToChar(PChar(iStr),pBuf); Result:=String(pBuf); FreeMem(pBuf); end;
Procedure BuildFileList; var sr: TSearchRec; Begin FileList:=TStringList.Create; if FindFirst(FilesDirName, faAnyFile, sr) = 0 then begin repeat begin if (sr.Attr and (faVolumeID + faDirectory))<>0 Then Continue; FileList.Add(ExtractFilePath(FilesDirName)+sr.Name); end; until FindNext(sr) <> 0; FindClose(sr); end; end;
begin
Writeln('MailSender 1.0.1.1'); If (UpperCase(ParamStr(1))='-HELP')or(ParamCount<2) Then Begin Writeln('MailSender <files_path> <recipient> [<outbound>]'); Halt; end;
If ParamCount>0 Then FilesDirName:=IncludeTrailingPathDelimiter(ParamStr(1));
If ParamCount>1 Then RecipientAddress:=ParamStr(2);
If ParamCount>2 Then OutboundDirName:=ParamStr(3);
Writeln('Checking files...'); BuildFileList;
If FileList.Count <=0 Then Exit;
SMTP:=TIdSmtp.Create(nil); SMTP.Host := FromHost; SMTP.Port := 25; SMTP.MailAgent := 'MailSender 1.0.1.1';
Msg:=TIdMessage.Create(nil); Msg.From.Name := FromName; Msg.From.Address := FromAddress; Msg.ReplyTo.EMailAddresses := FromAddress; Msg.UseNowForDate := True; Msg.Recipients.EMailAddresses := RecipientAddress; Msg.MessageParts.Clear; Msg.Encoding := meMIME; Msg.AttachmentEncoding := 'MIME'; Msg.MessageParts.AttachmentEncoding := 'MIME';
For i:=0 to FileList.Count-1 do Begin With TIdAttachment.Create(Msg.MessageParts,FileList[i]) do Begin ContentTransfer:='base64'; End; End;
Msg.SaveToFile(OutboundDirName+RecipientAddress+'_'+ FormatDateTime('ddmmyyyyhhmmss',Now)+'.msg');
try try Writeln('Sending...'); SMTP.Connect(10000); SMTP.Send(Msg); Writeln('Sent...'); except on E:Exception do Begin Writeln('ERROR: ' + E.Message); End; end; finally if SMTP.Connected then SMTP.Disconnect; end; Msg.Free; Smtp.Free; Writeln('Clean-up...'); For i:=0 to FileList.Count-1 do DeleteFile(FileList[i]); Writeln('Finished'); end.
|
|
« Последнее редактирование: 04-12-2007 21:31 от Алексей1153++ »
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #11 : 07-04-2006 10:48 » |
|
Синий Аллигатор, добро пожаловать на борт
|
|
|
Записан
|
|
|
|
|
Never
|
|
« Ответ #13 : 07-04-2006 15:40 » |
|
х77, Ахтунг! Синий вышел на тропу ))
|
|
|
Записан
|
не умеете летать- не мучайте метлу!
|
|
|
ymhuk
|
|
« Ответ #14 : 10-04-2006 21:05 » |
|
RomCom, с помощью Инди. Вот с авторизацией часто возникает проблема. Иногда сервак шлет мессагу, мол попробуйте еще раз позднее, но и позднее не выходит. Синий Аллигатор, код схож с моим. Попробую еще раз. Надеюсь получится. Ну вощето у меня выбора нет нужна 5 по курсовой.
|
|
|
Записан
|
Знаешь мало - поучись, знаешь много - поделись.
|
|
|
ymhuk
|
|
« Ответ #15 : 12-04-2006 22:15 » |
|
Еще одна проблема. На этот раз с отчетами в Дельфи. Я создаю в Rave отчет, подключаю его к проекту. Могу просмотреть только отчеты не берущие данные из какой-либо базы данных.
|
|
|
Записан
|
Знаешь мало - поучись, знаешь много - поделись.
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #16 : 13-04-2006 17:02 » |
|
наверное, кроме создания отчёта, стоит создать и базу данных? а вообще, Рэйв - это зло. неужели нельзя фаст-репорт юзать или что-то ещё приличное?
|
|
|
Записан
|
|
|
|
ymhuk
|
|
« Ответ #17 : 13-04-2006 18:09 » |
|
x77, база есть. То есть рейв использовать не стоит. Что-то с фастом я вообще не знаком.
|
|
|
Записан
|
Знаешь мало - поучись, знаешь много - поделись.
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #18 : 13-04-2006 18:14 » |
|
так сделай на том, с чем знаком. есть масса вариантов, которые позволяют обходиться вообще без генераторов отчётов - формировать и распечатывать HTML на основе данных в базе, или скармливать всё в Excel, к примеру.
|
|
|
Записан
|
|
|
|
ymhuk
|
|
« Ответ #19 : 13-04-2006 18:22 » |
|
Да ятак всегда и поступаю. Но почему-то раньше я уже пользовался этим проверенным способом, а теперь не получается Рейв не может подключиться к данным. Может потому что я использую ADO при подключении(иначе никак у меня Access), а раньше я использовал BDE/
|
|
|
Записан
|
Знаешь мало - поучись, знаешь много - поделись.
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #20 : 13-04-2006 18:32 » |
|
цепляйся а аксесу через ODBC - и получишь то же самое БДЕ, если проблема только в этом.
|
|
|
Записан
|
|
|
|
ymhuk
|
|
« Ответ #21 : 14-04-2006 20:41 » |
|
x77, попробовал походу проблема не в этом. Сейчас пытаюсь через html строить
|
|
|
Записан
|
Знаешь мало - поучись, знаешь много - поделись.
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #22 : 14-04-2006 21:04 » |
|
база в принципе читабельна? она открывается откуда-нибудь кроме абсцесса?
я не понимаю, что именно не идёт... настроить ОДБС-подключение - достаточно тривиально. Заюзать БДЕ для доступа - тем более. Выкинуть данные в эксель или в ХТМЛ - вообще ерунда.
что конкретно не выходит?
|
|
|
Записан
|
|
|
|
ymhuk
|
|
« Ответ #23 : 14-04-2006 21:55 » |
|
база читается отлично. Сейчас занимаюсь отчетами через html. Кое-что выходит спасибо за совет я про этот прием даже не подумал. А вот Райв так и не зароботал так что от него окончателно откказался.
|
|
|
Записан
|
Знаешь мало - поучись, знаешь много - поделись.
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #24 : 14-04-2006 22:31 » |
|
спрашивай, только одна просьба на будущее. на новые вопросы создавай новые темы
|
|
|
Записан
|
|
|
|
ymhuk
|
|
« Ответ #25 : 14-04-2006 23:21 » |
|
x77, будет много хлама. Пока вопросов нет.
|
|
|
Записан
|
Знаешь мало - поучись, знаешь много - поделись.
|
|
|
ymhuk
|
|
« Ответ #26 : 18-04-2006 18:38 » |
|
Всем спасибо за помощь. Сдал курсач. 5 обеспечена. А обновление даже никто не проверял поверили на слово.
|
|
|
Записан
|
Знаешь мало - поучись, знаешь много - поделись.
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #27 : 18-04-2006 21:02 » |
|
ymhuk, поздравляем
|
|
|
Записан
|
|
|
|
|