Email Lesen

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

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

Email Lesen

Beitrag von Rolf Ramacher »

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: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Email Lesen

Beitrag von brandelh »

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: 188
Registriert: Di, 24. Jul 2007 9:17

Re: Email Lesen

Beitrag von Scarmo »

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: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Email Lesen

Beitrag von Herbert »

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: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Email Lesen

Beitrag von Tom »

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: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Email Lesen

Beitrag von Rolf Ramacher »

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: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Email Lesen

Beitrag von Tom »

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
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Email Lesen

Beitrag von Werner_Bayern »

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

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Email Lesen

Beitrag von Werner_Bayern »

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

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Email Lesen

Beitrag von Tom »

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: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Email Lesen

Beitrag von Rolf Ramacher »

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: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Email Lesen

Beitrag von Rolf Ramacher »

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
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Email Lesen

Beitrag von Werner_Bayern »

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

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Email Lesen

Beitrag von Rolf Ramacher »

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
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Email Lesen

Beitrag von Werner_Bayern »

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

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Email Lesen

Beitrag von Werner_Bayern »

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

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Hans Zethofer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 278
Registriert: Fr, 27. Jan 2006 8:29
Wohnort: 2700 Wiener Neustadt
Hat sich bedankt: 1 Mal
Kontaktdaten:

Re: Email Lesen

Beitrag von Hans Zethofer »

jetzt hast wieder die falsche Var drinnen [-X

Code: Alles auswählen

nCode = XseeGetEmailFile(0, nNbrMsg, @cEmailName, @cEmailDir, @cAttachDir)
_____________
lg
Hans
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Email Lesen

Beitrag von Werner_Bayern »

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

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Email Lesen

Beitrag von Rolf Ramacher »

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: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Email Lesen

Beitrag von brandelh »

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: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Email Lesen

Beitrag von Rolf Ramacher »

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
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Email Lesen

Beitrag von Werner_Bayern »

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

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Email Lesen

Beitrag von Rolf Ramacher »

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: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Email Lesen

Beitrag von Rolf Ramacher »

Ich glaube ich habs.
danke
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Email Lesen

Beitrag von Werner_Bayern »

Bitte :wink:

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

Werner

<when the music is over, turn off the lights!>
Antworten