AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke email-downloader as as service
Thema durchsuchen
Ansicht
Themen-Optionen

email-downloader as as service

Ein Thema von erich.wanker · begonnen am 8. Mai 2017 · letzter Beitrag vom 2. Jun 2017
 
Benutzerbild von erich.wanker
erich.wanker

Registriert seit: 31. Jan 2008
Ort: im schönen Salzburger Land
454 Beiträge
 
Delphi XE4 Professional
 
#3

AW: email-downloader as as service

  Alt 9. Mai 2017, 09:25
Hallo,

vielen Dank für deine Nachfrage: Hab jetzt - das was ich in der Webapp hatte - in einen Service gepackt ..

ABER: Ob das, was ich da so zusammengeschustert hab auch wirklich stabil läuft ist ne andere Frage ????


Code:
program mailservice;

uses
  Vcl.SvcMgr,
  Unit1 in 'Unit1.pas' {MountainWebMailer: TService};

{$R *.RES}

begin
  if not Application.DelayInitialize or Application.Installing then
    Application.Initialize;
  Application.CreateForm(TMountainWebMailer, MountainWebMailer);
  Application.Run;
end.

Code:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.SvcMgr, Vcl.Dialogs,
  ZAbstractConnection, ZConnection, Data.DB, ZAbstractRODataset,ComCtrls,
  ZAbstractDataset, ZDataset, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack,
  IdSSL, IdSSLOpenSSL, IdMessage, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdExplicitTLSClientServerBase,IdAttachment, IdMessageClient, IdPOP3,IniFiles,
  Vcl.ExtCtrls,IdText,Registry;


type
  TMountainWebMailer = class(TService)
    pop: TIdPOP3;
    msg: TIdMessage;
    IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
    MAILDATENBANK: TZQuery;
    DMAILDATENBANK: TDataSource;
    MAILKONTEN: TZQuery;
    DMAILKONTEN: TDataSource;
    Z_NUMMER: TZQuery;
    ZConnection1: TZConnection;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
      ini: TIniFile;
      filename:String;
  public
    function GetServiceController: TServiceController; override;
    { Public-Deklarationen }
  end;

var
  MountainWebMailer: TMountainWebMailer;

implementation

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  MountainWebMailer.Controller(CtrlCode);
end;

function TMountainWebMailer.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;




procedure TMountainWebMailer.Timer1Timer(Sender: TObject);
var MailCount,Mailgroesse,intIndex :Integer;
    itm:TListItem;
    i:integer;
    s,extensio:string;
    neue_nummer:String;

    ininame:String;
    lokaler_pfad,
    hostname,
    datenpfad,
    installationspfad,
    domain_name :String;
begin

 with TEventLogger.Create('Mailservice') do
  begin
    try
      LogMessage('ServiceStart...', EVENTLOG_INFORMATION_TYPE);
    finally
      Free;
    end;
  end;



  ininame := extractfilepath(ParamStr(0)) + 'server.ini';
  filename := extractfilepath(ParamStr(0));



  ini := TIniFile.Create(ininame);
  try
    lokaler_pfad     := ini.ReadString('DATABASE','Pfad',extractfilepath(ParamStr(0))+'files\database\DATABASE.FDB');
    hostname         := ini.ReadString('DATABASE','Host','localhost');
    datenpfad        := ini.ReadString('FILES',  'Pfad',extractfilepath(ParamStr(0)));
    installationspfad := ini.ReadString('PFAD',   'Pfad','');
    domain_name      := ini.ReadString('DATABASE','Domain','');
  finally
    ini.Free;
  end;





 with TEventLogger.Create('Mailservice') do
  begin
    try
      ZConnection1.Disconnect;
      ZConnection1.HostName:=hostname;
      ZConnection1.Port:=3050;
      ZConnection1.Database:=lokaler_pfad;
      ZConnection1.User:='SYSDBA';
      ZConnection1.Password:='masterkey';
      ZConnection1.Connect;


      LogMessage('Connection.Connect ...', EVENTLOG_INFORMATION_TYPE);
      LogMessage('Connection.Database ...' + lokaler_pfad, EVENTLOG_INFORMATION_TYPE);
    finally
      Free;
    end;
  end;







 with TEventLogger.Create('Mailservice') do
  begin
    try
      LogMessage('Loop starts ...', EVENTLOG_INFORMATION_TYPE);
    finally
      Free;
    end;
  end;




 with TEventLogger.Create('Mailservice') do
  begin
    try

      MAILKONTEN.SQL.Clear;
      MAILKONTEN.SQL.Append('SELECT * FROM MAILKONTEN');
      MAILKONTEN.Open;

      LogMessage('MAILKONTEN Open...', EVENTLOG_INFORMATION_TYPE);
    finally
      Free;
    end;
  end;





while not MAILKONTEN.Eof do
begin

      POP.Disconnect;
      POP.Host := MAILKONTEN.FieldByName('POP3').AsString;
      POP.Port := strtoint(MAILKONTEN.FieldByName('PORT_POP3').AsString);
      POP.Username := MAILKONTEN.FieldByName('BENUTZERNAME').AsString;
      POP.Password := MAILKONTEN.FieldByName('KENNWORT').AsString;
      POP.Connect;




      MailCount := POP.CheckMessages;

      LogMessage('MAILKONTO "'+POP.Username+'" hat '+inttostr(MailCount)+' Mails', EVENTLOG_INFORMATION_TYPE);
      if MailCount > 0 then
      begin

          for intIndex := 1 to MailCount do
          begin
            msg.Clear;
            pop.Retrieve(intIndex, Msg);


            MAILDATENBANK.SQL.Clear;
            MAILDATENBANK.SQL.Append('SELECT MESSAGID FROM MAILDATENBANK WHERE MESSAGID = '+#39+msg.MsgId+#39+'');
            MAILDATENBANK.Open;



            // Die Mail habe ich noch nicht !!!!!!!!!
            if MAILDATENBANK.RecordCount = 0 then
            begin

            Z_NUMMER.SQL.Clear;
            Z_NUMMER.SQL.add('SELECT GEN_ID( POOL, 1 ) AS IDR FROM RDB$DATABASE');
            Z_NUMMER.open;
            neue_nummer:=inttostr(Z_NUMMER.FieldByName('IDR').AsInteger);


            MAILDATENBANK.SQL.Clear;
            MAILDATENBANK.SQL.Append('SELECT * FROM MAILDATENBANK WHERE INR = -1');
            MAILDATENBANK.Open;

            MAILKONTEN.SQL.Clear;
            MAILKONTEN.SQL.Append('SELECT * FROM MAILKONTEN WHERE INR = -1');
            MAILKONTEN.Open;


            MAILDATENBANK.Append;
            //MAILDATENBANK.FieldByName('USER').AsInteger:=strtoint(main.MainForm.benutzernummer);
            MAILDATENBANK.FieldByName('INR').AsString:=neue_nummer;

            MAILDATENBANK.FieldByName('VON').AsString:=Msg.From.Text;
            MAILDATENBANK.FieldByName('ANTWORTADRESSE').AsString:=msg.from.Address;
            MAILDATENBANK.FieldByName('BETREFF').AsString:=Msg.Subject;
            MAILDATENBANK.FieldByName('DATUM').AsDateTime:=Msg.Date;
            MAILDATENBANK.FieldByName('MIMETYPE').AsString:=msg.AttachmentEncoding;
            MAILDATENBANK.FieldByName('CONTENTTYPE').AsString:=msg.ContentType;
            MAILDATENBANK.FieldByName('MESSAGID').AsString:=msg.MsgId;
            MAILDATENBANK.FieldByName('KONTONAME').AsString:=MAILKONTEN.FieldByName('KONTONAME').AsString;
            MAILDATENBANK.FieldByName('KONTONUMMER').AsString:=MAILKONTEN.FieldByName('INR').AsString;

            if Msg.MessageParts.Count = 0 then MAILDATENBANK.FieldByName('ANHANG').AsString:='';
            if Msg.MessageParts.Count > 0 then MAILDATENBANK.FieldByName('ANHANG').AsString:='Anhang';
            MAILDATENBANK.FieldByName('GELESEN').AsInteger:=0;
            MAILDATENBANK.FieldByName('PR').AsInteger:=0;
            MAILDATENBANK.FieldByName('ZUORDNUNG').AsString:='';

            MAILDATENBANK.Post;



                //Anhang
                for i := 0 to Msg.MessageParts.Count-1 do begin
                  if Msg.MessageParts.Items[i] is tIdAttachment then
                      begin
                        s := (Msg.MessageParts.Items[i] as tIdAttachment).Filename;

                        // Extension ändern
                       extensio:= ExtractFileExt(s) ;

                       (Msg.MessageParts.Items[i] as tIdAttachment).savetofile(filename +'files\Mails\Anhang_' + neue_nummer +extensio);
                      end;
                end;




                // HTML Mail
                if msg.MessageParts.Count > 0 then
                begin

                for i := 0 to Msg.MessageParts.Count-1 do begin
                    if Msg.MessageParts.Items[i] is TIdText then
                     begin
                      //Logger.AddLogStrings(TIdText(Msg.MessageParts.Items[i]).Body);
                      TIdText(Msg.MessageParts.Items[i]).Body.SaveToFile(filename +'files\Mails\html_' + neue_nummer + '.html');
                     end;
                end;
                end;


                // Text Mail
                if msg.ContentType = 'text/html' then
                begin

                  //Logger.AddLogStrings(msg.body);
                  Msg.Body.SaveToFile(filename +'files\Mails\html_' + neue_nummer + '.html');
                end;


                // Text Mail
                if msg.ContentType = 'text/plain' then
                begin

                  //Logger.AddLogStrings(msg.body);
                  Msg.Body.SaveToFile(filename +'files\Mails\text_' + neue_nummer + '.txt');
                end;


            end; // Die Mail habe ich noch nicht


            ///////
            //Kopie am Server belassen: also NICHT löschen
            //pop.Delete(intIndex);  // Löscht die aktuelle Mail !!!!
            end;

            end;

      // POP.Disconnect;



MAILKONTEN.Next;
end;






 with TEventLogger.Create('Mailservice') do
  begin
    try
      LogMessage('ServiceStop...', EVENTLOG_INFORMATION_TYPE);
    finally
      Free;
    end;
  end;
    ZConnection1.Disconnect;


end; // procedure

end.
Angehängte Grafiken
Dateityp: jpeg components.jpeg (126,8 KB, 30x aufgerufen)
Erich Wanker - for life:=1971 to lebensende do begin ..
O
/H\
/ \
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz