Das Forentreffen 2018 findet am 20./21. April in Dresden statt. Weitere Infos hier
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

Email Lesen

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1818
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Email Lesen

Beitrag von Rolf Ramacher » Mi, 18. Mai 2016 9: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
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13753
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Email Lesen

Beitrag von brandelh » Mi, 18. Mai 2016 9: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
Scarmo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 137
Registriert: Di, 24. Jul 2007 9:17

Re: Email Lesen

Beitrag von Scarmo » Mi, 18. Mai 2016 9:44

Hallo Rolf

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

Gruss
Marco

Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1813
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Kontaktdaten:

Re: Email Lesen

Beitrag von Herbert » Mi, 18. Mai 2016 10:30

5 bis 10 Minuten genügen auch
Grüsse Herbert
Immer in Bewegung...

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 6793
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: Email Lesen

Beitrag von Tom » Mi, 18. Mai 2016 11: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
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1818
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Re: Email Lesen

Beitrag von Rolf Ramacher » Do, 19. Mai 2016 14: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
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 6793
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: Email Lesen

Beitrag von Tom » Do, 19. Mai 2016 14: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
Werner_Bayern
Programmier-Gott
Programmier-Gott
Beiträge: 1280
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Email Lesen

Beitrag von Werner_Bayern » Do, 19. Mai 2016 14: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: 1280
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Email Lesen

Beitrag von Werner_Bayern » Do, 19. Mai 2016 14: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
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 6793
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: Email Lesen

Beitrag von Tom » Do, 19. Mai 2016 15: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
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1818
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Re: Email Lesen

Beitrag von Rolf Ramacher » Sa, 28. Mai 2016 12: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: 1818
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Re: Email Lesen

Beitrag von Rolf Ramacher » Mi, 08. Jun 2016 15: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
Werner_Bayern
Programmier-Gott
Programmier-Gott
Beiträge: 1280
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Email Lesen

Beitrag von Werner_Bayern » Do, 09. Jun 2016 1: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
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1818
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Re: Email Lesen

Beitrag von Rolf Ramacher » Do, 09. Jun 2016 8: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
Werner_Bayern
Programmier-Gott
Programmier-Gott
Beiträge: 1280
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Email Lesen

Beitrag von Werner_Bayern » Sa, 11. Jun 2016 15: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: 1280
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Email Lesen

Beitrag von Werner_Bayern » Sa, 11. Jun 2016 15: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
Hans Zethofer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 250
Registriert: Fr, 27. Jan 2006 8:29
Wohnort: 2700 Wiener Neustadt
Kontaktdaten:

Re: Email Lesen

Beitrag von Hans Zethofer » Sa, 11. Jun 2016 20:55

jetzt hast wieder die falsche Var drinnen [-X

Code: Alles auswählen

nCode = XseeGetEmailFile(0, nNbrMsg, @cEmailName, @cEmailDir, @cAttachDir)
_____________
lg
Hans

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

Re: Email Lesen

Beitrag von Werner_Bayern » Sa, 11. Jun 2016 23:20

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

Werner

Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1818
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Re: Email Lesen

Beitrag von Rolf Ramacher » Mo, 20. Jun 2016 15: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
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13753
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Email Lesen

Beitrag von brandelh » Mo, 20. Jun 2016 15: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
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1818
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Re: Email Lesen

Beitrag von Rolf Ramacher » Mo, 20. Jun 2016 15: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
Werner_Bayern
Programmier-Gott
Programmier-Gott
Beiträge: 1280
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Email Lesen

Beitrag von Werner_Bayern » Mo, 20. Jun 2016 16: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
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1818
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Re: Email Lesen

Beitrag von Rolf Ramacher » Di, 21. Jun 2016 9: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: 1818
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Kontaktdaten:

Re: Email Lesen

Beitrag von Rolf Ramacher » Di, 21. Jun 2016 15:53

Ich glaube ich habs.
danke
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de

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

Re: Email Lesen

Beitrag von Werner_Bayern » Mi, 22. Jun 2016 12:45

Bitte :wink:

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

Werner

Antworten