RunShell: Probleme bei Dauerbetrieb?

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

RunShell: Probleme bei Dauerbetrieb?

Beitrag von Martin Altmann »

Hallo allerseits,
hat einer von Euch ein wenig Erfahrung beim Einsatz von RunShell()?
In dem DevCon-Server nutze ich RunShell, um mittels eines Kommandozeilentools (BLAT.EXE) Mails zu versenden - klappt soweit auch ganz gut, bis zu einem gewissen Zeitpunkt!
Ich starte das BLAT asynchron und im Hintergrund (also die letzten beiden RunShell()-Parameter sind .t.) und die Mail wird verschickt. Aber nach einer gewissen Zeit (ich vermute mal, dass sich das an der Anzahl der bereits getätigten Aufrufe festmachen lässt und nicht an der Laufzeit des Dienstes (DevCon-Server)) werden die Mails nicht mehr geschickt -> Dienst stoppen und starten und es geht wieder für eine Weile...
Bevor ich BLAT aufrufe, prüfe ich, ob es das Programm auf meinem Server gibt (ob es also zugreifbar ist) -> wenn nicht, gibt es einen Eintrag im Logfile.
Dieser Eintrag fehlt in dem o.g. Fall, also war die Prüfung erfolgreich!
Und wer jetzt denkt, ich komme gar nicht bis zur Prüfung und das Programm bricht vorher ab, ist schief gewickelt! Direkt vor der Prüfung wird die zu mailende Datei geschrieben und die ist da!
BLAT selber rufe ich mit dem Parameter -log auf, so dass alle Ausgaben des Befehls in eine Logdatei geschrieben werden - diese Logdatei wird dann jedoch nicht geschrieben, also hat der Aufruf nicht geklappt!
Nur leider kann man das ja nicht abfragen, da ich das ganze Asynchron aufrufe (der Server soll ja nicht warten, bis die Mail gesendet wurde...)
Hat irgendjemand eine Idee, woran das Verhalten liegen kann? Wird die Shell vielleicht nicht beendet und sind deshalb nur eine bestimmte Anzahl Aufrufe drin?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
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:

Beitrag von Rolf Ramacher »

Hallo Martin,

ich arbeite auch mit runshell. allerdings habe ich ein Main-prgramm bei denen über Menüsteuerung die entsprechenden einzelnen exe-Files gestartet werden. Hierbei habe ich den 3.Wert bei Runshell sprich lAsync auf .t. gesetzt . d.h. meine exe-Datei wird nicht angehalten.
lBackground habe ich nicht drin enthalten. also standardwert .f.

Ist vielleicht der Dateianhang der email so groß, daß es etwa dauert ?
oder setze mal lAsync auch auf .t.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Rolf,
die Mail selber ist sehr klein und sie kommt gar nicht an! Nicht nur Minuten später, sondern gar nicht - den ganzen Tag lang nicht mehr, bis ich den Dienst neu starte.
Und wie gesagt, es läuft bereits asynchron...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo allerseits,
ich bin mir ziemlich sicher, dass das Problem am RunShell liegt - habe nämlich auch an anderer Stelle noch Aufrufe drin - z.B. um Dateien zu verschieben (auch dort hat der liebe Tom dann schon mal Probleme gehabt...) - und in diesem Fall auch synchron!
Das geht mit Xbase++-eigenen Mitteln ja leider nicht (Wichtig: Zeitstempel der zu verschiebenden Datei muss unverändert bleiben!!!)
@Günter (oder wer es sonst noch weiß): Was kann ich denn für einen APICall nehmen, um das folgende Kommando entsprechend abzulösen:

Code: Alles auswählen

RunShell( '/C move /Y ' + mempfad + '\' + recnum + '.MEM ' + rempfad,,.f.,.t. )
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
Martin Altmann hat geschrieben: Das geht mit Xbase++-eigenen Mitteln ja leider nicht (Wichtig: Zeitstempel der zu verschiebenden Datei muss unverändert bleiben!!!)

Code: Alles auswählen

FUNCTION         GetFileTime(cFile)
LOCAL cCreation := SPACE(8), cAccess := SPACE(8), cWrite := SPACE(8)
LOCAL nKernel32Dll:=DllLoad("Kernel32.dll")
LOCAL nH := FOPEN(cFile, FO_READ+FO_SHARED )
LOCAL aTime := {}

   If nKernel32Dll > 0 .AND. nH # -1
      IF DllCall(nKernel32Dll, DLL_STDCALL, 'GetFileTime', nH, @cCreation, @cAccess, @cWrite) # 0
         AADD( aTime, cCreation )
         AADD( aTime, cAccess   )
         AADD( aTime, cWrite    )
      ENDIF
      DllUnload(nKernel32Dll)
   EndIf

   IF nH # -1
      FCLOSE(nH)
   ENDIF

Return aTime

FUNCTION         SetFileTime(cFile, aTime)
LOCAL cCreation := aTime[1], cAccess := aTime[3], cWrite := aTime[3]
LOCAL nKernel32Dll:=DllLoad("Kernel32.dll")
LOCAL nH := FOPEN(cFile, FO_WRITE+FO_SHARED )

   If nKernel32Dll > 0 .AND. nH # -1
      DllCall(nKernel32Dll, DLL_STDCALL, 'SetFileTime', nH, @cCreation, @cAccess, @cWrite)
      DllUnload(nKernel32Dll)
   EndIf

   IF nH # -1
      FCLOSE(nH)
   ENDIF

RETURN NIL
Martin Altmann hat geschrieben: @Günter (oder wer es sonst noch weiß): Was kann ich denn für einen APICall nehmen, um das folgende Kommando entsprechend abzulösen:

Code: Alles auswählen

RunShell( '/C move /Y ' + mempfad + '\' + recnum + '.MEM ' + rempfad,,.f.,.t. )
wie ist es den mit der SHFile Class ? damit kannst du doch auch "move"n

gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Jimmy,
danke für Deinen Code!
Was für eine SHFile-Klasse meinst Du? Die gibt es nciht, sicherlich ein Tippfehler von Dir?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
Martin Altmann hat geschrieben: Was für eine SHFile-Klasse meinst Du? Die gibt es nciht, sicherlich ein Tippfehler von Dir?
nope, die ist von Phil aus dem FolderBrow.ZIP
/*
SHFile Class testprogram, see below for Class documentation

The complete class is freeware.

SHFile-Class

What it does :

Provides a wrapper for the SHFileOperation-API function

Which methods are avalaible for the "public" :

Well, they do just what their names are telling !
For further explanations see the header of each method

Copy
Move
Rename
Delete

SHFile needs the BAP-Library from Alaska to work correctly, so
be sure that you provide the BAP.DLL with your programs.
*/
gruss by OHR
Jimmy
p.s. mir fällt gerade ein das ich meinen MAPI Client (OE) per Thread
aufrufen musste weil ich sonst Probleme hatte. Schon mal versucht BLAT
auch per Thread aufzurufen ?
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Jimmy,
habe ich bisher nicht versucht - wie äußerten sich denn die Probleme bei Dir?
Bin gerade dabei, das Mailversenden auf Asinet umzustellen! Jedoch hat die Implementation von Alaska (:AddRecipient()) einen Bug, die dafür sorgt, dass ich die Mails hunderttausendfach bekomme... Ist nervig!
Wenn man nämlich die Methode mehrmals aufruft, weil man mehrere Empfänger angeben will, so wird vor jeder weitere Adresse ein "," eingefügt! Also steht in der To-Zeile dann: "Mail1;,Mail2" :arrow: ist natürlich Unsinn! Dadurch versucht der Mailserver die Zustellung diverse Male (mehrere Dutzend mal), bevor er entnervt aufgibt...
Werde mal versuchen, die Adressen mittels der Methode :addHeader( "To", ... ) hinzuzufügen!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
Martin Altmann hat geschrieben: habe ich bisher nicht versucht - wie äußerten sich denn die Probleme bei Dir?
hm ... irgendwas war da wenn man SOCMapi nicht per Thread gestartet
hatte ... müsste es mal rausnehmen um zu sehen was dann passiert.
Auf jeden Fall waren das irgend welche "hänger" die dann passierten.

war auch nur eine Idee per Thread was zu machen.

gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo allerseits,
Martin Altmann hat geschrieben:Jedoch hat die Implementation von Alaska (:AddRecipient()) einen Bug, die dafür sorgt, dass ich die Mails hunderttausendfach bekomme... Ist nervig!
Wenn man nämlich die Methode mehrmals aufruft, weil man mehrere Empfänger angeben will, so wird vor jeder weitere Adresse ein "," eingefügt! Also steht in der To-Zeile dann: "Mail1;,Mail2" :arrow: ist natürlich Unsinn! Dadurch versucht der Mailserver die Zustellung diverse Male (mehrere Dutzend mal), bevor er entnervt aufgibt...
Werde mal versuchen, die Adressen mittels der Methode :addHeader( "To", ... ) hinzuzufügen!
hat leider den selben Effekt - zum k*tzen!!
Ist hier vielleicht einer, der Asinet zum Mailversand nutzt und diese Probleme nicht hat???

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Beitrag von Muecke »

Hallo Martin,
Ich mach dies mit Asinet

Code: Alles auswählen

       IF SendOutMail( cMailServer,    ;  // name of mail server (defaultsto "mail")
                       cFromAdr,       ;  // mail address of sender
                       cToMailAdr ,    ;  // recipient ( "ac" means: stringor array of strings )
                       cBetreff,       ;  // subject line
                       cBody   ,       ;  // message body
                       ,               ;  // CC: recipients
                       ,               ;  // BCC: recipients
                       aAttachFilNames,;  // name(s) of attached file(s)
                       cLogFile )         // log file name
         else 
            ......................................

Code: Alles auswählen

#include "EMail.ch"
#pragma library( "ASINet10.lib" )

FUNCTION SendOutMail( cMailServer , ;  // name of mail server (defaults to "mail")
                      cFromAddr   , ;  // mail address of sender
                      acToAddr    , ;  // recipient ( "ac" means: string or array of strings )
                      cSubject    , ;  // subject line
                      cMessage    , ;  // message body
                      acCCAddr    , ;  // CC: recipients
                      acBCCAddr   , ;  // BCC: recipients
                      acAttachFile, ;  // name(s) of attached file(s)
                      cLogFile      ;  // log file name
                                    )  // Return --> .T. or .F. on error

   LOCAL oMimeMsg
   LOCAL oSmtpClient
   LOCAL oLog := LogWriter():new( cLogFile )


   /*
    * parameter checking
    */
   IF Valtype( cMailServer ) <> "C"
      cMailServer := "mail"
   ENDIF

   IF Valtype( cFromAddr ) <> "C"
      oLog:logError( ERR_MSG_SENDER )
   ENDIF

   IF Valtype( cSubject ) <> "C"
      oLog:logError( ERR_MSG_SUBJECT )
   ENDIF

   IF Valtype( cMessage ) <> "C"
      oLog:logError( ERR_MSG_MESSAGE )
   ENDIF

   IF ! ( ( Valtype( acToAddr ) == "A" .AND. ;
        AScan( acToAddr, {|x| Valtype(x) <> "C" } ) == 0 ) .OR. ;
        Valtype( acToAddr ) == "C" )

      oLog:logError( ERR_MSG_RECIPIENT )
   ENDIF

   IF ! ( ( Valtype( acCCAddr ) == "A" .AND. ;
        AScan( acCCAddr, {|x| Valtype(x) <> "C" } ) == 0 ) .OR. ;
        Valtype( acCCAddr ) == "C"  ) .AND. ;
        acCCAddr <> NIL

      oLog:logError( ERR_MSG_CCHEADER )
   ENDIF

   IF ! ( ( Valtype( acBCCAddr ) == "A" .AND. ;
        AScan( acBCCAddr, {|x| Valtype(x) <> "C" } ) == 0 ) .OR. ;
        Valtype( acBCCAddr ) == "C"  ) .AND. ;
        acBCCAddr <> NIL

      oLog:logError( ERR_MSG_BCCHEADER )
   ENDIF

   IF ! ( ( Valtype( acAttachFile ) == "A" .AND. ;
        AScan( acAttachFile, {|x| Valtype(x) <> "C" .OR. .NOT. FExists(x) } ) == 0 ) .OR. ;
        Valtype( acAttachFile ) == "C"  ) .AND. ;
        acAttachFile <> NIL

      oLog:logError( ERR_MSG_ATTACHMENT )
   ENDIF

   IF oLog:isError()
      IF Valtype( cLogFile ) == "C"
         oLog:writeLogFile()
      ENDIF
      RETURN .F.
   ENDIF


   /*
    * We're using arrays of strings
    */
   IF Valtype( acToAddr ) == "C"
      acToAddr := { acToAddr }
   ENDIF

   IF Valtype( acCCAddr ) == "C"
      acCCAddr := { acCCAddr }
   ENDIF

   IF Valtype( acBCCAddr ) == "C"
      acBCCAddr := { acBCCAddr }
   ENDIF

   IF Valtype( acAttachFile ) == "C"
      acAttachFile := { acAttachFile }
   ENDIF


   /*
    * create a new mime message object and compose e-mail
    */
   oMimeMsg := MimeMessage():new()

   /*
    * add sender and recipient(s)
    */
   oMimeMsg:setFrom( MailAddress():new( cFromAddr ) )
   AEval( acToAddr, {|cTo| oMimeMsg:addRecipient( MailAddress():new(cTo) ) } )

   /*
    * add subject line and message body
    */
   oMimeMsg:setSubject( cSubject )
   oMimeMsg:setMessage( cMessage )

   /*
    * add CC headers and BCC headers
    */
   IF Valtype( acCCAddr ) == "A"
      AEval( acCCAddr, {|cCC| oMimeMsg:addHeader( "CC", cCC ) } )
   ENDIF

   IF Valtype( acBCCAddr ) == "A"
      AEval( acBCCAddr, {|cBCC| oMimeMsg:addHeader( "BCC", cBCC ) } )
   ENDIF

   /*
    * add file attachments
    */
   IF Valtype( acAttachFile ) == "A"
      AEval( acAttachFile, {|cFile| oMimeMsg:attachFile( cFile ) } )
   ENDIF

   /*
    * create an SMTP client object and log full information (=2)
    */
   oSmtpClient := SMTPClient():new( cMailServer,,, oLog, 2 )

   /*
    * connect to SMTP server and send message
    */
   IF .NOT. oSmtpClient:connect()
      oLog:logError( ERR_MSG_CONNECTION )

   ELSE
      IF .NOT. oSmtpClient:send( oMimeMsg )
         oLog:logError( ERR_MSG_TRANSMISSION )
      ENDIF
      /*
       * disconnect from server
       */
      oSmtpClient:disconnect()
   ENDIF

   IF .NOT. oLog:isError()
      oLog:write( ERR_MSG_NOERROR )
   ENDIF

   IF Valtype( cLogFile ) == "C"
      oLog:writeLogFile()
   ENDIF

RETURN ( .NOT. oLog:isError() )
Was ich leider noch nicht kann sind Bilder zu empfangen, momentan nur Text. Weiss noch nicht wie ich dies abfangen soll oder kann.
Senden ist kein Problem von Bilder,Text ,Worddateien .....

Gruss Thomas
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Thomas,
vielen Dank - ist im Prinzip ja das Demoprogramm von Alaska. Habe ich auch so versucht!
Aber sobald ich mehr als einen Empfänger habe (also zwei bei To oder zwei bei CC), klappt es nicht vernünftig! Wenn man sich die Mailheader in Rohform anschaut (also nicht die, die man standardmässig in Outlook angezeigt bekommt, sondern wenn man bei geöffneter Mail in Ansicht-Optionen geht), dann sieht man den Fehler:
To: ........@.....de;, ....@......de;
Wenn man also mehrere Empfänger hinzufügt, dann wird dazwischen noch ein "," gesetzt :arrow: Blödsinn!
Und das ist dann die Fehlermail (Auszug), die man nach etlichen Zustellversuchen bekommt:
Hi. This is the qmail-send program at maildo.versatel.de.
I'm afraid I wasn't able to deliver your message to the following addresses.
This is a permanent error; I've given up. Sorry it didn't work out.

<....@.....>:
qmail-inject: fatal: unable to parse this line:
To: .....@.......de;, .....@......de;
I'm not going to try again; this message has been in the queue too long.
Problem dabei: Es wird immer wieder versucht, zuzustellen - und jedesmal gelingt es zur Hälfte - die erste der beiden Mailadressen bekommt also immer die Mail bei jedem Versuch!!!!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hallo Martin,

bezüglich Verschieben -- hast du frename() probiert? Das muss gehen.
"Im dem Fall, daß das Ursprungsverzeichnis nicht mit dem Zielverzeichnis übereinstimmt, wird die Datei in das Zielverzeichnis verschoben."
Viele Grüße,
Günter
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Günter,
ich bin der Meinung, ja! Aber ich bin mir nicht mehr sicher - werde es morgen mal versuchen (könnte sein, dass dabei der Zeitstempel geändert wurde...).

BTW, willst Du denn diesmal gar nicht zur DevCon kommen? Wäre schade!!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hallo Martin,

während der DevCon bin ich voraussichtlich auf einem Lehrgang (leider!)

Viele Grüße,
Günter
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Günter,
sehr schade!! Hoffentlich verschiebt sich dieser noch :D

Übrigens: FRename geht, was den Zeitstempel anbelangt (dieser bleibt erhalten)! Aber ich hatte das damals nicht genommen, weil er knallt, wenn die Zieldatei bereits existiert! Das umgehe ich jetzt aber, indem ich dies vorher prüfe und sie ggf. lösche!

Vielen Dank und viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
notloesung
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 194
Registriert: Fr, 24. Feb 2006 8:09
Kontaktdaten:

Beitrag von notloesung »

Martin Altmann hat geschrieben:Problem dabei: Es wird immer wieder versucht, zuzustellen - und jedesmal gelingt es zur Hälfte - die erste der beiden Mailadressen bekommt also immer die Mail bei jedem Versuch!!!!
Hallo Martin,

ich selbst habe bisher noch keine Mails mit (oder sagt man aus?) XBase verschickt.
Aber was spricht dagegen wenn du zwei Mails hintereinander abschickst? Eine an die Mailadresse1 und die zweite dann an die Mailadresse2.
Gut, der erste Empfänger wird es in seiner Mail nicht sehen können wer diese sonst noch bekommen hat. Welche technischen Unterschiede (Versenden einer Mail an Mehrere Empfänger gegenüber Mehrerer Mails an jeweils einen Empfänger) es gibt weis ich leider nicht.

Währe ja eine "suboptimale" Lösung.
Aber ich vermute solche hast du ja bereits :wink:

Gruß,
Notloesung
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Beitrag von Muecke »

Hallo Martin,

ich hab dies mal durchgespielt mit 5 emal Adressen und jeder bekommt dies einmal.Kann kein Fehler feststellen.

Wie werden den deine Adressen übergeben?

Ich lese die aus und gebe sie mit

info@......;gut@.......;


So kann ich an verschiede Kunden mailen.

Gruss Thomas
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Thomas,
ich übergebe sie wie folgt:

Code: Alles auswählen

oMail:addRecipient( MailAddress():new( "m....@v....de" ) )
oMail:addRecipient( MailAddress():new( "i...@x....de" ) )
Im Header der Mail steht das dann wie o. gepostet:

Code: Alles auswählen

To: m....@v....de;, i...@x....de;
So sollte es eigentlich auch bei Deinen Mails stehen!
Das Du damit keine Probleme hast, liegt dann wahrscheinlich an Deinem SMTP-Server, der das ignoriert.
Meiner tut es nicht.

Hallo Jarek,
so ähnlich. Ich schicke die Mail jetzt an die eine Adresse im To und an die andere im CC.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag von andreas »

Hallo Martin,

ich versende auch EMails mit ASINET, habe aber aus dem Alaska-Beispiel die SendIT- und SendMail-Funktion genommen und hatte bis jetzt keine Probleme. Die Email-Adressen füge ich selbst zu einem String
zusammen und übergebe an die Funktion.

Bei der SendMail-Funktion habe ich die Zeile

Code: Alles auswählen

oSmtpClient := SMTPClient():new( cMailServer,,, oLog, 2 )
angepasst:

Code: Alles auswählen

#DEFINE CFROMHOST		"mail.xxx.de"
oSmtpClient := SMTPClient():new( cMailServer,,CFROMHOST, oLog, 2 )
, um den richtigen Server im Header der EMail zu haben.
Zuletzt geändert von andreas am Fr, 01. Jun 2007 8:35, insgesamt 1-mal geändert.
Gruß,

Andreas
VIP der XUG Osnabrück
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Beitrag von Muecke »

Hallo Martin,

sollte keine Rolle spielen welcher Server ich habe. Ich hab dies auf 2 verschiede ausgeführt und keine Probleme damit gehabt.

Nimm doch einfach mal 4 Adressen und das Beispiel von Asinet.
Adressen erfassen und senden und dann sollte es doch gehen.

Code: Alles auswählen

cToMailAdr := "info@.....;gut@......"
Was ich nicht rausfinde, wie ich Worddateien oder Bilder empfangen kann.

Gruss Thomas
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Beitrag von Muecke »

Hallo Andreas,

Bin mal wieder zu langsam gewesen. :(

kannst Du mir vielleicht helfen mit empfangen von Bilder und Worddateien.

Ich kann nur Text empfangen.

Grusss Thomas
Zuletzt geändert von Muecke am Fr, 01. Jun 2007 8:41, insgesamt 1-mal geändert.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Andreas,
habe ich auch versucht!

Code: Alles auswählen

:oMail:AddHeader( "To", "xxx@xxx.de;yyy@xxx.de" )
Hat den selben Effekt: Im To-Header steht dann:

Code: Alles auswählen

To xxx@xxx.de;,yyy@xxx.de;
Ich kann mir nur schwer vorstellen, dass bei Euch was anderes stehen sollte!
Meine Asinetversion habe ich mir vor kurzem erst heruntergeladen (1.9).
Die .DLL-Dateien haben das Datum:
27.04.2006 (AsiNet1c.dll und AsiUtl10.dll)
01.06.2006 (AsiNet10.dll)

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo
um Dateien zu verschieben ... Das geht mit Xbase++-eigenen Mitteln ja leider nicht
ich nehme dafür immer RENAME. Natürlich muss man dann zuerst die Ursprungsdateien mit directory() suchen und im Ziel bestehende löschen (oder Abfrage ?) bevor man RENAME aufruft. FRename() habe ich bisher noch gar nicht gekannt, ist aber auf jeden Fall eleganter.
Bin mir nicht sicher, aber ich meine MOVE überschreibt auch keine bestehenden Dateien ;-)

Das AsiNet Problem habe ich auch nicht.

Allerdings habe ich jetzt keinen Zugriff auf meinen Quellcode.
Ich kann ihn heute Abend aber gerne posten.
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Hubert,
ich bin mir ziemlich sicher, dass move das Ziel überschreibt.
Was Eure AsiNet-Anmerkungen anbelangt:
Ich rede hier nicht von dem kurzen Header, der in Outlook angezeigt wird! Dort sieht er auch bei mir richtig aus!
Entscheidend ist der "echte" Headereintrag!!! Und der ist falsch!
Das sieht man in Outlook nur, wenn man die Mail per Doppelklick im eigenen Fenster öffnet und dann Ansicht-Optionen auswählt. Dort werden die Internet-Header in einer Listbox angezeigt. Diese einfach von unten nach oben scrollen, bis man den To-Eintrag findet...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Antworten