Email Lesen

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

Email Lesen

Beitragvon Rolf Ramacher » Mi, 18. Mai 2016 8:14

guten Morgen zusammen,

ich lese emails mit Hilfe von Marshall Soft- klappt und funkt. gut. Nur eines.
es funkt. bisher nur wenn emails im Posteingang bereits vorhanden sind. Ich möchte aber das Programm starten und das dann eingehende emails erkannt und verarbeitet werden.

xseegetemailcount
liefert die gesamte anzahl der emails
starte ich das Programm - kopiere die email hinein
die Variable nNbrMsg bleibt bei Null

Code: Alles auswählen
   do while lWeiter = .t.
      nNbrMsg:=XseeGetEmailCount(0)
      nMsgNbr:=1

     * decode downloaded email ?
      if nDecodeFlag = TRUE
       ? "Email will be decoded"
        else
       * do not decode downloaded files !
       ? "Email will NOT be decoded!"
       nCode = XseeIntegerParam(0, SEE_RAW_MODE, 1)
      endif
msgbox(var2lchar(nNbrMsg))

If nNbrmsg >0
      For i = 1 to nNbrMsg
         If ((nMsgNbr>0) .AND. (nMsgNbr <= nNbrMsg))
 
                         .... hier macht er seinen Teil.
                        Endif
         nMsgNbr++
      Next i
Else
      nNbrMsg:=XseeGetEmailCount(0)
      nMsgNbr:=1
msgbox(var2lchar(nNbrMsg))
Endif
msgbox("nach endif")

      sleep(1000)
   enddo

Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1807
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim

Re: Email Lesen

Beitragvon brandelh » Mi, 18. Mai 2016 8:30

Mit Marshall kenn ich mich nicht aus, aber je nach Zugang (POP3 oder IMAP) muss man auf dem Server aktiv nachfragen ob was neues da ist.
Du schreibst, dass du die vorhandenen erkennst aber keine neuen, das hört sich nach Cache an, es müsste ein refresh oder "neue eMail suchen" Befehl geben.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13267
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: Email Lesen

Beitragvon Scarmo » Mi, 18. Mai 2016 8:44

Hallo Rolf

Oder einfach einen Thread erstellen, welcher nichts anderes macht wie alle 60 Sekunden nach neuen Emails schaut.

Gruss
Marco
Benutzeravatar
Scarmo
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 127
Registriert: Di, 24. Jul 2007 8:17

Re: Email Lesen

Beitragvon Herbert » Mi, 18. Mai 2016 9:30

5 bis 10 Minuten genügen auch
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1764
Registriert: Mi, 13. Aug 2008 23:22
Wohnort: Gmunden am Traunsee, Österreich

Re: Email Lesen

Beitragvon Tom » Mi, 18. Mai 2016 10:50

Das ist ein Klassiker für SetTimerEvent. Dann kann man sich die DO ... WHILE-Schleife auch sparen. BTW, "nDecodeFlag" wird nach meinem Dafürhalten nicht in der Funktion ermittelt, sondern steht offenbar schon vorher fest. Das dürfte nicht funktionieren. BTW2: "DO WHILE lWeiter = .T." ist syntaktisch richtig, aber bei logischen Variablen genügt "DO WHILE lWeiter".
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 6679
Registriert: Do, 22. Sep 2005 22:11
Wohnort: Berlin

Re: Email Lesen

Beitragvon Rolf Ramacher » Do, 19. Mai 2016 13:20

Hallo Tom,

kurze Nachfrage: Der SetTimerEvent steht dann in der Proc Main. SetTimerEvent rufe ich dann diese Function auf, die das ganze abrufen der email und verarbeiten durchführt
Ist das so richtig ?
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1807
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim

Re: Email Lesen

Beitragvon Tom » Do, 19. Mai 2016 13:45

Hallo, Rolf.

Du kannst den Aufruf platzieren, wo Du möchtest - in der MAIN() bietet sich allerdings an. Es sähe dann wie folgt aus:

Code: Alles auswählen
SetTimerEvent(<nHundertstelSekunden>,<bAufrufcodeblock>)


also beispielsweise

Code: Alles auswählen
SetTimerEvent(500,{||CheckMails()})


Was dazu führen würde, dass die Funktion "CheckMails" alle 5 Sekunden aufgerufen wird. Darin bräuchtest Du dann keine endlose DO-WHILE-Schleife mehr, ansonsten könnte sie - vorausgesetzt, sie funktioniert - so bleiben, wie sie derzeit ist.

Achtung: Es darf immer nur ein Timer-Event geben; der nächste Aufruf killt den vorigen. Im Prinzip ist das eine Kapselung des normalen Multithreadings (arbeitet intern auch so), mit dem Unterschied, dass es eben einen Timer gibt. Den kann man in Threads allerdings auch selbst verwirklichen. Wenn man mehrere Funktionalitäten innerhalb desselben Timers benötigt, fasst man sie in einer Funktion zusammen.

Edit: Es läuft auch in einem Thread. Das bedeutet, dass Du PRIVATEs oder geöffnete Workareas nicht siehst. Du musst Dich um derlei innerhalb der Funktion kümmern.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 6679
Registriert: Do, 22. Sep 2005 22:11
Wohnort: Berlin

Re: Email Lesen

Beitragvon Werner_Bayern » Do, 19. Mai 2016 13:46

Servus Rolf,

das sieht etwas wirr aus. Ich mache das so:
Code: Alles auswählen
oStatus2:setCaption("Suche nach Nachrichten...")
nNbrMsg = XseeGetEmailCount(0)
if nNbrMsg < 0
   oFehler:setCaption(ShowError(nNbrMsg))
   return .f.
else
   oStatus2:setCaption(ltrim(str(nNbrMsg)) + " Nachricht(en) vorhanden.")
   If nNbrMsg = 0
      oFehler:setCaption("Schliesse Verbindung.")
      oStatus1:setCaption("Keine neuen Mails vorhanden!")
      oStatus2:setCaption("")
      nCode = XseeClose(0)
      nCode = XseeRelease()
      return .t.
endif
// Hier Mails holen mit XseeGetEmailFile!
es grüßt euch

Werner
Benutzeravatar
Werner_Bayern
Programmier-Gott
Programmier-Gott
 
Beiträge: 1209
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Email Lesen

Beitragvon Werner_Bayern » Do, 19. Mai 2016 13:52

Servus Rolf,

ein fixer Timer ist hier evtl. gefährlich, wenn die Abfragen in der Zeit nicht fertig werden, oder z. B. eine Wartezustand (Fehlermeldung etc.) erzeugt wird.
Dann wird die Funktion evtl. nochmal aufgerufen, obwohl die vorherige Abfrage noch läuft.
Ich mache das daher mit einem eigenen Thread und frag immer vor dem nächsten Aufruf auf oThread:active ab. Ist ja sehr einfach zu realisieren - wie Tom auch schon indirekt empfiehlt.
es grüßt euch

Werner
Benutzeravatar
Werner_Bayern
Programmier-Gott
Programmier-Gott
 
Beiträge: 1209
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Email Lesen

Beitragvon Tom » Do, 19. Mai 2016 14:10

Ich mache das mit Get-Set-Funktionen:

Code: Alles auswählen
SetTimerEvent(100,{||MacheIrgendWas()})

FUNCTION MacheIrgendWas()
IF IchMacheSchonIrgendwas()
  RETURN NIL
ENDIF
IchMacheSchonIrgendwas(.T.)
... Code ...
IchMacheSchonIrgendwas(.F.)
RETURN NIL

FUNCTION IchMacheSchonIrgendwas(lSet)
STATIC lIchMacheWas := .F.
IF PCOUNT()>0
 lIchMacheWas := lSet
ENDIF
RETURN lIchMacheWas
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 6679
Registriert: Do, 22. Sep 2005 22:11
Wohnort: Berlin

Re: Email Lesen

Beitragvon Rolf Ramacher » Sa, 28. Mai 2016 11:21

Guten Morgen Werner,

so sieht die PRG jetzt aus nach deinem vorschlag, aber jetzt passiert gar nichts. ergibt zwar Meldung ab, aber kein Download und kein Löschen der email


Code: Alles auswählen
   * connect to POP3 server
   ? "Connecting to POP3 server " + LTrim(Str(nProxyPort))
   nCode = XseePop3ConnectSSL(0, nProxyPort, nPop3Port, @cPop3Server, @cPop3User, @cPop3Pass, Chr(0))

   if nCode < 0
     ShowError(nCode)
     return
   endif 
   * get # messages waiting
   ? "Getting message status..."

     * decode downloaded email ?
      if nDecodeFlag = TRUE
       ? "Email will be decoded"
        else
       * do not decode downloaded files !
       ? "Email will NOT be decoded!"
       nCode = XseeIntegerParam(0, SEE_RAW_MODE, 1)
      endif


   do while lWeiter = .t.
      nNbrMsg:=XseeGetEmailCount(0)
msgbox(var2lchar(nNbrMsg))
      For i = 1 to nNbrMsg
            ? "Reading Message ", LTRIM(STR(nMsgNbr)), ", please wait..."
            nCode = XseeGetEmailFile(0, nMsgNbr, @cEmailName, @cEmailDir, @cAttachDir)
            if nCode < 0
               ShowError(nCode)
      *         return
            endif
          ? "Saved as ", LTRIM(cEmailName)
      
             * display "From:" header
            cBuffer = SPACE(256)
            nCode = XseeGetHeader(0, SEE_GET_FROM, @cBuffer, 255)
              if nCode > 0
                  ? "From: " + Left(cBuffer, nCode)
              endif
            cHeader:=cBuffer
   
          * display "Subject:" header
             cBuffer = SPACE(256)
             nCode = XseeGetHeader(0, SEE_GET_SUBJECT, @cBuffer, 255)
            if nCode > 0
               ? "Subject: " + Left(cBuffer, nCode)
            endif
            cBetreff:=cBuffer
      
             * get list of attachment file names
            cBuffer = SPACE(1024)
              nCode = XseeDebug(0, SEE_GET_ATTACH_NAMES, @cBuffer, 1024)
             if nCode > 0
               ? "Attachment names are:"
               ? Left(cBuffer, nCode)
             endif
          * get list of attachment file types
            cBuffer = SPACE(1024)
              nCode = XseeDebug(0, SEE_GET_ATTACH_TYPES, @cBuffer, 1024)
             if nCode > 0
               ? "Attachment types are:"
               ? Left(cBuffer, nCode)
             endif       
            Do Case
               Case At("visulution",cUser) >0
            
               // email-empfänger rauslesen ??
                  If substr(cBetreff,1,5) = "12345"
                     aDir:=Directory((cAttachDir+"\*.*") )
                     For z = 1 to Len(aDir)
                        cFile:=aDir[z][1]
                        nPos:=At("-",cFile)
                        cNeufile:=substr(cFile,nPos+1)
                        Copy File( (cAttachDir+"\"+cfile)) to (cImport+"\"+cNeufile )
                     Next z
                     lLoesch:=.t.
                  Else
                     lLoesch:=.f.
                  Endif
                  FileDelete( (cAttachDir+"\*.*") )

         
               Case At("transfer",cUser) >0
                  // abfrage nach KD-Nr. im Betreff
                  If substr(cBetreff,1,5) = "12345"
                     aDir:=Directory((cAttachDir+"\*.*") )
                     For z = 1 to Len(aDir)
                        cFile:=aDir[z][1]
                        nPos:=At("-",cFile)
                        cNeufile:=substr(cFile,nPos+1)
                        Copy File( (cAttachDir+"\"+cfile)) to (cImport+"\"+cNeufile )
                     Next z
                     lLoesch:=.t.
                  Else
                     lLoesch:=.f.
                  Endif
                  FileDelete( (cAttachDir+"\*.*") )
   
               Case At("inventur",cUser) >0
                     aDir:=Directory((cAttachDir+"\*.*") )
                     For z = 1 to Len(aDir)
                        cFile:=aDir[z][1]
                        nPos:=At("-",cFile)
                        cNeufile:=substr(cFile,nPos+1)
                        Copy File( (cAttachDir+"\"+cfile)) to (cVerz+"\"+cNeufile )
                     Next z
                     lLoesch:=.t.
                     FileDelete( (cAttachDir+"\*.*") )
            EndCase

            * uncomment the following to delete the email
            *** deleting message from server
            If lLoesch = .t.
               nCode = XseeDeleteEmail(0, nNbrMsg)
             ? "Message ",  LTRIM(STR(nNbrMsg)), " deleted from server."
            Endif
      Next i

      lLoesch:=.f.
      If File("emaillesen.txt")
         lWeiter:=.f.
      Endif
      sleep(1000)
   enddo

   ? "Closing connection."
   nCode = XseeClose(0)
   nCode = XseeRelease()
   FErase("emaillesen.txt")
return
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1807
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim

Re: Email Lesen

Beitragvon Rolf Ramacher » Mi, 08. Jun 2016 14:25

Hi zusammen
ich komme irgendwie nicht so ganz weiter. Hier wie der Vorschlag von Werner. Aber er bleibt bei einer email stehen. sobald neue email reinkommen. beim ersten mal liest er die richtige Anzahl der vorhandenen emails. danach bleibt er bei Null

ich kann aber nicht erkennen warum ?

Code: Alles auswählen
   do while lWeiter = .t.
      nNbrMsg:=XseeGetEmailCount(0)
msgbox(var2lchar(nNbrMsg))
      For i = 1 to nNbrMsg
            lLoesch := .f.

            ? "Reading Message ", LTRIM(STR(nNbrMsg)), ", please wait..."
            nCode = XseeGetEmailFile(0, nNbrMsg, @cEmailName, @cEmailDir, @cAttachDir)
            if nCode < 0
               ShowError(nCode)
      *         return
            endif
          ? "Saved as ", LTRIM(cEmailName)
      
             * display "From:" header
            cBuffer = SPACE(256)
            nCode = XseeGetHeader(0, SEE_GET_FROM, @cBuffer, 255)
              if nCode > 0
                  ? "From: " + Left(cBuffer, nCode)
              endif
            cHeader:=cBuffer
   
          * display "Subject:" header
             cBuffer = SPACE(256)
             nCode = XseeGetHeader(0, SEE_GET_SUBJECT, @cBuffer, 255)
            if nCode > 0
               ? "Subject: " + Left(cBuffer, nCode)
            endif
            cBetreff:=cBuffer
      
             * get list of attachment file names
            cBuffer = SPACE(1024)
              nCode = XseeDebug(0, SEE_GET_ATTACH_NAMES, @cBuffer, 1024)
             if nCode > 0
               ? "Attachment names are:"
               ? Left(cBuffer, nCode)
             endif
          * get list of attachment file types
            cBuffer = SPACE(1024)
              nCode = XseeDebug(0, SEE_GET_ATTACH_TYPES, @cBuffer, 1024)
             if nCode > 0
               ? "Attachment types are:"
               ? Left(cBuffer, nCode)
             endif       
  --- hier plausibilitätsprüfungen

            * uncomment the following to delete the email
            *** deleting message from server
            If lLoesch = .t.
               nCode = XseeDeleteEmail(0, nNbrMsg)
             ? "Message ",  LTRIM(STR(nNbrMsg)), " deleted from server."
            Endif
      Next i

      lLoesch:=.f.
      If File("emaillesen.txt")
         lWeiter:=.f.
      Endif
      sleep(1000)
   enddo


Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1807
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim

Re: Email Lesen

Beitragvon Werner_Bayern » Do, 09. Jun 2016 0:35

Servus Rolf,

es fehlt noch einiges an Code, z. B. Dein XseeSetProxySSL().

Du setzt lWeiter nach dem ersten Durchlauf auf .f., kann es daran liegen?
es grüßt euch

Werner
Benutzeravatar
Werner_Bayern
Programmier-Gott
Programmier-Gott
 
Beiträge: 1209
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Email Lesen

Beitragvon Rolf Ramacher » Do, 09. Jun 2016 7:25

Guten Morgen Werner,

lWeiter wird auf .f. wenn die Datei "emaillesen.txt" existiert. dann wird das programm beendet. die xseeset - Funktionen habe ich weiter vorher definiert auch wie decoderflag auf .t. vor der do while schleife.
oder müssen die da auch rein. ?

vor der do while schleife
Code: Alles auswählen
   nCode = XseeAttach(1,  SEE_KEY_CODE)
   if nCode < 0
     ? "Key code = " + LTRIM(STR(SEE_KEY_CODE))
     ? "Error code = " + LTRIM(STR(nCode)) + ": Cannot attach SEE (check key code)"
     return
   endif
   * registered version always returns 999
   if nCode <> 999
     ? Ltrim(Str(nCode)) + " days remaining for evaluation"
   endif
   * enable SEE logging
   nCode = XseeStringParam(0,SEE_LOG_FILE, @cLogName)
   * decode unnamed attachments (if any)
   nCode = XseeIntegerParam(0, SEE_DECODE_UNNAMED, 1)
   * prefix attachment filenames with "101-", "102-", etc.
   nCode = XseeIntegerParam(0, SEE_FILE_PREFIX, 101)
   * direct SEE to make an undecoded copy when seeGetEmailFiles is called
   * (this applies to non-raw mode only)
   nCode = XseeIntegerParam(0, SEE_SET_RAWFILE_PREFIX, Asc("_") )

   * pass POP3 proxy server info to SEE
   Kode = XseeSetProxySSL(0, 1, @cProxyDir, @cProxyCert, @cProxyExe)
   if Kode < 0
     ShowError(Kode)
     return
   else
     ? "Proxy parameters set"
   endif

   * connect to POP3 server
   ? "Connecting to POP3 server " + LTrim(Str(nProxyPort))
   nCode = XseePop3ConnectSSL(0, nProxyPort, nPop3Port, @cPop3Server, @cPop3User, @cPop3Pass, Chr(0))

   if nCode < 0
     ShowError(nCode)
     return
   endif 
   * get # messages waiting
   ? "Getting message status..."

     * decode downloaded email ?
      if nDecodeFlag = TRUE
       ? "Email will be decoded"
        else
       * do not decode downloaded files !
       ? "Email will NOT be decoded!"
       nCode = XseeIntegerParam(0, SEE_RAW_MODE, 1)
      endif

Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1807
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim

Re: Email Lesen

Beitragvon Werner_Bayern » Sa, 11. Jun 2016 14:18

Servus Rolf,

der Fehler ist relativ einfach:
Code: Alles auswählen
For i = 1 to nNbrMsg
            lLoesch := .f.

            ? "Reading Message ", LTRIM(STR(nNbrMsg)), ", please wait..."
            nCode = XseeGetEmailFile(0, nNbrMsg, @cEmailName, @cEmailDir, @cAttachDir)


Du liest immer nur die letzte Mail mit nNbrMsg. Hier gehört i rein:
Code: Alles auswählen
nCode = XseeGetEmailFile(0, i, @cEmailName, @cEmailDir, @cAttachDir)
es grüßt euch

Werner
Benutzeravatar
Werner_Bayern
Programmier-Gott
Programmier-Gott
 
Beiträge: 1209
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Email Lesen

Beitragvon Werner_Bayern » Sa, 11. Jun 2016 14:42

Hier der überarbeitete Code, der funktioniert:
Code: Alles auswählen
    do while lWeiter = .t.
      nNbrMsg:=XseeGetEmailCount(0)
      For i = 1 to nNbrMsg

            ? "Reading Message ", LTRIM(STR(i)), ", please wait..."
            nCode = XseeGetEmailFile(0, nNbrMsg, @cEmailName, @cEmailDir, @cAttachDir)
            if nCode < 0
               ? ShowError(nCode)
               return
            endif
          ? "Saved as ", LTRIM(cEmailName)

             * display "From:" header
            cBuffer = SPACE(256)
            nCode = XseeGetHeader(0, SEE_GET_FROM, @cBuffer, 255)
              if nCode > 0
                  ? "From: " + Left(cBuffer, nCode)
              endif

          * display "Subject:" header
             cBuffer = SPACE(256)
             nCode = XseeGetHeader(0, SEE_GET_SUBJECT, @cBuffer, 255)
            if nCode > 0
               ? "Subject: " + Left(cBuffer, nCode)
            endif

             * get list of attachment file names
            cBuffer = SPACE(1024)
              nCode = XseeDebug(0, SEE_GET_ATTACH_NAMES, @cBuffer, 1024)
             if nCode > 0
               ? "Attachment names are:"
               ? Left(cBuffer, nCode)
             endif
          * get list of attachment file types
            cBuffer = SPACE(1024)
              nCode = XseeDebug(0, SEE_GET_ATTACH_TYPES, @cBuffer, 1024)
             if nCode > 0
               ? "Attachment types are:"
               ? Left(cBuffer, nCode)
             endif
//  --- hier plausibilitätsprüfungen

            *** deleting message from server
            If lLoesch = .t.
               nCode = XseeDeleteEmail(0, i)
             ? "Message ",  LTRIM(STR(i)), " deleted from server."
            Endif
      Next i

      lLoesch:=.f.
      If File("emaillesen.txt")
         lWeiter:=.f.
      Endif
      sleep(1000)
   enddo

nCode = XseeClose(0)
nCode = XseeRelease()
return


Achte auf die i ersetzt bei nNbrMsg.
es grüßt euch

Werner
Benutzeravatar
Werner_Bayern
Programmier-Gott
Programmier-Gott
 
Beiträge: 1209
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Email Lesen

Beitragvon Hans Zethofer » Sa, 11. Jun 2016 19:55

jetzt hast wieder die falsche Var drinnen [-X

Code: Alles auswählen
nCode = XseeGetEmailFile(0, nNbrMsg, @cEmailName, @cEmailDir, @cAttachDir)
_____________
lg
Hans
Benutzeravatar
Hans Zethofer
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 225
Registriert: Fr, 27. Jan 2006 8:29
Wohnort: 2326 Maria Lanzendorf

Re: Email Lesen

Beitragvon Werner_Bayern » Sa, 11. Jun 2016 22:20

Danke (mein Testprogramm für Rolf schaut anders aus...) 8)
es grüßt euch

Werner
Benutzeravatar
Werner_Bayern
Programmier-Gott
Programmier-Gott
 
Beiträge: 1209
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Email Lesen

Beitragvon Rolf Ramacher » Mo, 20. Jun 2016 14:16

Hallo Werner

so ich habe es jetzt geändert. ich habe es nochmal geprüft sind 2 emails vorhanden werden beide gelesen und auch gelöscht. Aber wenn ich das Programm starte und danach eine email reinkommt. bleibt
nNbrmsg auf Null stehen

ist noch irgendwo etwas falsch??

Code: Alles auswählen
   do while lWeiter = .t.
      nNbrMsg:=XseeGetEmailCount(0)
msgbox(var2lchar(nNbrMsg))
      For i = 1 to nNbrMsg
            lLoesch := .f.

            ? "Reading Message ", LTRIM(STR(i)), ", please wait..."
            nCode = XseeGetEmailFile(0, i, @cEmailName, @cEmailDir, @cAttachDir)
            if nCode < 0
               ShowError(nCode)
      *         return
            endif
          ? "Saved as ", LTRIM(cEmailName)
      
             * display "From:" header
            cBuffer = SPACE(256)
            nCode = XseeGetHeader(0, SEE_GET_FROM, @cBuffer, 255)
              if nCode > 0
                  ? "From: " + Left(cBuffer, nCode)
              endif
            cHeader:=cBuffer
   
          * display "Subject:" header
             cBuffer = SPACE(256)
             nCode = XseeGetHeader(0, SEE_GET_SUBJECT, @cBuffer, 255)
            if nCode > 0
               ? "Subject: " + Left(cBuffer, nCode)
            endif
            cBetreff:=cBuffer
      
             * get list of attachment file names
            cBuffer = SPACE(1024)
              nCode = XseeDebug(0, SEE_GET_ATTACH_NAMES, @cBuffer, 1024)
             if nCode > 0
               ? "Attachment names are:"
               ? Left(cBuffer, nCode)
             endif
          * get list of attachment file types
            cBuffer = SPACE(1024)
              nCode = XseeDebug(0, SEE_GET_ATTACH_TYPES, @cBuffer, 1024)
             if nCode > 0
               ? "Attachment types are:"
               ? Left(cBuffer, nCode)
      
      endif       
            * uncomment the following to delete the email
            *** deleting message from server
            If lLoesch = .t.
               nCode = XseeDeleteEmail(0, i)
             ? "Message ",  LTRIM(STR(nNbrMsg)), " deleted from server."
            Endif
      Next i

      lLoesch:=.f.
      If File("emaillesen.txt")
         lWeiter:=.f.
      Endif
      sleep(1000)
   enddo

   ? "Closing connection."
   nCode = XseeClose(0)
   nCode = XseeRelease()
   FErase("emaillesen.txt")

Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1807
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim

Re: Email Lesen

Beitragvon brandelh » Mo, 20. Jun 2016 14:31

So wie ich das sehe wird die Schleife verlassen sobald die Datei "emaillesen.txt" vorhanden ist.
Dann wird die Datei gelöscht.

Rufst du diese Funktion alle z.b. 5 Minuten auf, sollte das so funktionieren wie du willst, vorausgesetzt die Infos von "emaillesen.txt" werden verarbeitet, das hab ich jetzt nicht geprüft.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13267
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: Email Lesen

Beitragvon Rolf Ramacher » Mo, 20. Jun 2016 14:39

Hi Hubert,

nein das hast du wohl falsch verstanden. Was in emaillesen.txt drin steht ist egal. Diese Datei dient nur, um die Applikation zu beenden. Das Programm läuft ja - nur die Varialbe bleibt auf Null stehen.
Das ist was ich nicht verstehe.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1807
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim

Re: Email Lesen

Beitragvon Werner_Bayern » Mo, 20. Jun 2016 15:34

Servus Rolf,

wie bereits telefonisch besprochen, ich hab in meiner Endlosschleife auch das Verbinden und Schließen des Mailservers mit drin, so funktioniert es seit Jahren. Teste das bitte mal bei Dir.
es grüßt euch

Werner
Benutzeravatar
Werner_Bayern
Programmier-Gott
Programmier-Gott
 
Beiträge: 1209
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Email Lesen

Beitragvon Rolf Ramacher » Di, 21. Jun 2016 8:11

guten Morgen @Werner

wenn ich dieses
Code: Alles auswählen
   nCode = XseeClose(0)
   nCode = XseeRelease()

   Kode = XseeSetProxySSL(0, 1, @cProxyDir, @cProxyCert, @cProxyExe)
   if Kode < 0
     ShowError(Kode)
     return
   else
     ? "Proxy parameters set"
   endif

   * connect to POP3 server
   ? "Connecting to POP3 server " + LTrim(Str(nProxyPort))
   nCode = XseePop3ConnectSSL(0, nProxyPort, nPop3Port, @cPop3Server, @cPop3User, @cPop3Pass, Chr(0))

   if nCode < 0
     ShowError(nCode)
     return
   endif 
   * get # messages waiting
   ? "Getting message status..."

     * decode downloaded email ?
      if nDecodeFlag = TRUE
       ? "Email will be decoded"
        else
       * do not decode downloaded files !
       ? "Email will NOT be decoded!"
       nCode = XseeIntegerParam(0, SEE_RAW_MODE, 1)
      endif



innerhalb der Do while-Schleife aber nach dem
Next i

einfüge - wird das Programm beendet. Sieht das bei dir anders aus? Was muss ich machen?
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1807
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim

Re: Email Lesen

Beitragvon Rolf Ramacher » Di, 21. Jun 2016 14:53

Ich glaube ich habs.
danke
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1807
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim

Re: Email Lesen

Beitragvon Werner_Bayern » Mi, 22. Jun 2016 11:45

Bitte :wink:

Das heißt, es läuft jetzt und Du bekommst auch zwischenzeitlich neue Mails?
es grüßt euch

Werner
Benutzeravatar
Werner_Bayern
Programmier-Gott
Programmier-Gott
 
Beiträge: 1209
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Nächste

Zurück zu Misc.

Wer ist online?

Mitglieder in diesem Forum: Yahoo [Bot] und 1 Gast