Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: HELP!!!Срочно!  (Прочитано 27623 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« : 30-03-2006 20:21 » 

Кто знает как можно автоматически обновлять базу данных (у меня база в Access - использую ADO) по электронной почте. То есть при получении мыла, база должна автоматически обновляться. Нужна любая инфа, ссылки, примеры. Заранее ОГРОМНОЕ СПАСИБО всем желающим помочь.
Записан

Знаешь мало - поучись, знаешь много - поделись.
zubr
Гость
« Ответ #1 : 31-03-2006 03:58 » 

Надо делать прогу, которая будет через определенные промежутки времени получать почту, ее анализировать, при получении нужной информации ее обрабатывать и обновлять БД. Для получения почты можно использовать готовые Delphi-компоненты, реализующие протокол POP3, к примеру TIdPOP3.
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #2 : 31-03-2006 06:21 » 

Узай The Bat (мож и у других клиентов такая фича есть - не знаю).
Настрой сортировщика писем на автоматическое сохранение аттача (с перезаписью существуещего файла) или с сохранением и запуском внешней программы.
Записан

Удачного всем кодинга! -=x[PooH]x=-
Igel
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 01-04-2006 15:38 » 

Так, посмотрим на задачу со стороны. Вырисовывается такая картина:
1. Есть БД и программа работающая с этими данными.
2. Изменения/обновления данных приходят по почте.
2.1. Это либо новые записи - конкретный случай
      Это "макрос" - который дополняет или изменяет или удаляет записи в БД - общий случай.
2.2. Почтовый клиент может быть любой, следовательно программа, которая работает с БД должна в любом случае получить и переработать данные. 2 варианта: писать надстройки для всех почтовых клиентов самых распространенных или перехватывать почту до клиента.

Что еще? А да , можно сделать в самой программе классическое обновление. А уж как оно идет - через почту или сразу через сайт - не суть важно.
Записан

Ёжики, это не только ценные шкурки...
ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 03-04-2006 20:04 » 

zubr, я понял, что нужно испльзовать протокол POP3, и я знаю как это делать с помощью стандартного для Делфи 5 компонента NMPOP3. Компонентом TIdPOP3 я пробовал пользоваться ("метод нучного тыка"), естественно ничего не получилось, потому что у NMPOP3 и TIdPOP3 разные свойства и функции.
Я уже начал подумывать создать второе приложение, которое будет принимать почту и передавать ее основной моей проге.
На всякий случай еще раз уточню задачу: клиенты отсылают мне инфу на мыло. Я принимаю почту соответствующую сначала заданной теме письма(например, "обновление"), а затем и содержащимся данным. Ну и затем обновляю данные в базе.
Мне обязательно нужно использовать Делфи 7, но я не могу подключить пакет FastNet, содержащий NMPOP3, с которым моя задача была бы уже решена. Я думаю может мне удалить пакет Indy и тогда конфликт исчезнет.
PooH, мне нужно чтобы использовалась только моя прога, а идея интересная.
Igel, писать надстройки для почтовых клиентов это слишком для курсовой. Ну, а почту в общем перехватывать и не надо.
Жду новых идей или просто советов.
Записан

Знаешь мало - поучись, знаешь много - поделись.
RomCom
Опытный

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 04-04-2006 20:33 » 

RomCom, сппасибо попробую.
Записан

Знаешь мало - поучись, знаешь много - поделись.
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #7 : 04-04-2006 21:32 » 

а в каком виде приходит обновление? что это? новый мдб-файл, который надо целиком заменить? тогда просто настраивается почтовик на сохранение вложений от определённого юзера или с определённой темой в определённую папку, пишется батник, который проверяет эту папку на наличие определённого файла, (разархивирует его, если надо), и заменяет им базу. вызов самого батника прописывайтся в Sheduled Jobs виндов на каждую ночь, например.

большинство подобных задач решаются безо всякого программирования в принципе, так и передай своему преподу Ага

если данные приходят в виде некоего скрипта или отдельного файла, который надо объединять с существующей базой, а не тупо заменять её, то там правильнее сделать нормальный репликационный механизм. можно взять любой готовый с поддержкой ОДБС и натравить его на присылаемый по почте апдейты.

вообще говоря, я бы рекомендовал продублировать темку в ветке общие вопросы или в базах данных, потому что аксцесс ну очень специфичная приблуда, очень тесно интегрированная с теми же почтовыми службами (аутглюк), и вполне вероятно, что там для подобных вещей может быть предусмотрен  штатный функционал.
Записан

ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 06-04-2006 21:25 » 

Все всем впасибо прога работает и принимает почту и базу обновляет. Пришлось делать своим способом - через 2 приложения. Но теперь еще одна проблема не сделать прогу отправляющую мыло. Не пойму smtp сервер мне отказывает что-ли. Подскажите который не трубует авторизации.
Записан

Знаешь мало - поучись, знаешь много - поделись.
RomCom
Опытный

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #11 : 07-04-2006 10:48 » 

Синий Аллигатор, добро пожаловать на борт Улыбаюсь
Записан

DemonicAlligator
Гость
« Ответ #12 : 07-04-2006 10:51 » 

Ыптц! Улыбаюсь
Записан
Never
Команда клуба

ua
Offline Offline
Пол: Женский

« Ответ #13 : 07-04-2006 15:40 » 

х77, Ахтунг! Синий вышел  на тропу Улыбаюсь))
Записан

не умеете летать- не мучайте метлу!
ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 10-04-2006 21:05 » 

RomCom, с помощью Инди. Вот с авторизацией часто возникает проблема. Иногда сервак шлет мессагу, мол попробуйте еще раз позднее, но и позднее не выходит.
Синий Аллигатор, код схож с моим. Попробую еще раз. Надеюсь получится. Ну вощето у меня выбора нет Улыбаюсь  нужна 5 по курсовой. 
Записан

Знаешь мало - поучись, знаешь много - поделись.
ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 12-04-2006 22:15 » 

Еще одна проблема. На этот раз с отчетами в Дельфи. Я создаю в Rave отчет, подключаю его к проекту.
Могу просмотреть только отчеты не берущие данные из какой-либо базы данных.
Записан

Знаешь мало - поучись, знаешь много - поделись.
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #16 : 13-04-2006 17:02 » 

наверное, кроме создания отчёта, стоит создать и базу данных? Улыбаюсь

а вообще, Рэйв - это зло. неужели нельзя фаст-репорт юзать или что-то ещё приличное?
Записан

ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 13-04-2006 18:09 » 

x77,  база есть. То есть рейв использовать не стоит. Что-то с фастом я вообще не знаком.
Записан

Знаешь мало - поучись, знаешь много - поделись.
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #18 : 13-04-2006 18:14 » 

так сделай на том, с чем знаком. есть масса вариантов, которые позволяют обходиться вообще без генераторов отчётов - формировать и распечатывать HTML на основе данных в базе, или скармливать всё в Excel, к примеру.
Записан

ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 13-04-2006 18:22 » 

Да  ятак всегда и поступаю. Но почему-то раньше я уже пользовался этим проверенным способом, а теперь не получается Рейв не может подключиться к данным. Может потому что я использую ADO при подключении(иначе никак у меня Access), а раньше я использовал BDE/
Записан

Знаешь мало - поучись, знаешь много - поделись.
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #20 : 13-04-2006 18:32 » 

цепляйся а аксесу через ODBC - и получишь то же самое БДЕ, если проблема только в этом.
Записан

ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #21 : 14-04-2006 20:41 » 

x77, попробовал походу проблема не в этом. Сейчас пытаюсь через html строить
Записан

Знаешь мало - поучись, знаешь много - поделись.
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #22 : 14-04-2006 21:04 » 

база в принципе читабельна? она открывается откуда-нибудь кроме абсцесса?

я не понимаю, что именно не идёт... настроить ОДБС-подключение - достаточно тривиально. Заюзать БДЕ для доступа - тем более. Выкинуть данные в эксель или в ХТМЛ - вообще ерунда.

что конкретно не выходит?
Записан

ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #23 : 14-04-2006 21:55 » 

база читается отлично. Сейчас занимаюсь отчетами через html. Кое-что выходит спасибо за совет я про этот прием даже не подумал. А вот Райв так и не зароботал так что от него окончателно откказался.
Записан

Знаешь мало - поучись, знаешь много - поделись.
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #24 : 14-04-2006 22:31 » 

спрашивай, только одна просьба на будущее. на новые вопросы создавай новые темы Ага
Записан

ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #25 : 14-04-2006 23:21 » 

x77, будет много хлама. Пока вопросов нет.
Записан

Знаешь мало - поучись, знаешь много - поделись.
ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #26 : 18-04-2006 18:38 » 

Всем  спасибо за помощь. Сдал курсач. 5 обеспечена. А обновление даже никто не проверял поверили на слово.
Записан

Знаешь мало - поучись, знаешь много - поделись.
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #27 : 18-04-2006 21:02 » new

ymhuk, поздравляем Ага
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines