Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit sendhtmlmail

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [Firmware] Problem mit sendhtmlmail

    Dieser Code führt dazu, dass kein Mail geschickt wird und nur ein Event mit ERR_MSGSND_MAIL_1 geschrieben wird

    Code:
    if PingResult > 1u08 then MailBodyPing = MailBodyPing + $<h1><strong><span style="color: #ff0000;">EibPC-Debug: kein Ping zum EibPC! um $ + convert(settime(), $$) + $</strong></h1><h3><strong></strong></h3>$ endif
    
    if after( size(MailBodyPing) > 1u16, 60000u64) then sendhtmlmail($Uwe@xyz.de$, $EibPC-Debug: Ping-Error!$, MailBodyPing ) ; MailBodyPing = $$ endif
    Wenn ich den Code wie folgt auflöse, geht das Mail raus:
    Code:
    if PingResult > 1u08 then MailBodyPing = MailBodyPing + $<h1><strong><span style="color: #ff0000;">EibPC-Debug: kein Ping zum EibPC! um $ + convert(settime(), $$) + $</strong></h1><h3><strong></strong></h3><br>$ endif
    
    if after( size(MailBodyPing) > 1u16, 60000u64) then MailPingTrigger = 1u08 endif
    
    If MailPingTrigger == 1u08 then \\
    sendhtmlmail($Uwe@xyz.de$, $EibPC-Debug: Ping-Error!$, MailBodyPing ) ; \\
    MailBodyPing = $$ ; \\
    MailPingTrigger = 0u08 \\
    endif
    Warum geht das erste Konstrukt nicht?

    Nachtrag:
    EibPC1 mit V4.015
    Zuletzt geändert von Uwe!; 09.09.2020, 22:58.
    ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

    #2
    Zitat von Uwe! Beitrag anzeigen
    ERR_MSGSND_MAIL_1
    wird ausgelöst, wenn die Nachricht nicht in die Warteschlange eingefügt werden kann, typischerweise weil diese voll ist. Sendet noch irgendwas anderes auf dem Gerät gerade?


    Kommentar


      #3
      Beide Varianten haben aber ein Problem: die Funktion send(html)mail beschreibt eine Warteschlange, die asynchron abgearbeitet wird. Diese Funktionen werden erst am Ende eines Zyklus verarbeitet. Du setzt aber innerhalb des Zyklus die Variable MailBodyPing bereits wieder zurück auf $$, somit wird auch nichts gesendet.

      Verwende zum Rücksetzen besser den Rückgabewer/Status der sendhtmlmail-Funktion.

      Kommentar


        #4
        Zitat von foobar0815 Beitrag anzeigen
        Sendet noch irgendwas anderes auf dem Gerät gerade?
        nein.
        Und ich versteh eben auch den Unterschied zwischen den zwei Varianten nicht. Beide sammeln Meldungen und schicken max. alle 60 Sek. ein Mail raus, wenn was neues aufgelaufen ist. Version 1 führt zum Fehler, Version 2 funktioniert.

        Bei Version 1 kommt da alle 60 Sek. ein neues Event ERR_MSGSND_MAIL_1, es geht gar kein Mail raus.

        Zitat von foobar0815 Beitrag anzeigen
        Verwende zum Rücksetzen besser den Rückgabewer/Status der sendhtmlmail-Funktion
        ja, das hab ich gemerkt, aber als eigenes Thema hier gefragt. Antwort dann wie erwartet, erst die Ok-Meldung abwarten. Dann muss ich irgendwie mit zwei Variablen arbeiten um eventuell neuen Content speichern zu können, solange das Mail noch nicht raus ist.
        Macht es allerdings aus meiner Sicht unnötig umständlich, ohne dass ich jetzt einen Mehrwert sehe, dass das so sein müsste.
        Damit ändere ich ja sozusagen nachträglich den Inhalt der Mail.
        Zuletzt geändert von Uwe!; 10.09.2020, 11:23.
        ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

        Kommentar


          #5
          so, hab mal schnell umgebaut. Diese Version 2a funktioniert und hat den Inhalt der Mail korrekt, also nicht geleert bevor das Mail versendet ist.
          Trotzdem die Frage, warum Version 1 gar nicht geht.

          Code:
          if PingResult > 1u08 then MailBodyPingT = MailBodyPingT + $<h1><strong><span style="color: #ff0000;">EibPC-Debug: kein Ping zum EibPC! um $ + convert(settime(), $$) + $</strong></h1><h3><strong></strong></h3><br>$ endif
          
          if after( size(MailBodyPingT) > 1u16 and MailPingResult == 0u08, 60000u64) then MailPingTrigger = 1u08 endif
          
          If MailPingTrigger == 1u08 then \\
          MailBodyPingF = MailBodyPingT ; \\
          MailPingResult = sendhtmlmail($Uwe@xyz.de$, $EibPC-Debug: Ping-Error!$, MailBodyPingF ) ; \\
          MailBodyPingT = $$ ; \\
          MailPingTrigger = 0u08 \\
          endif
          ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

          Kommentar


            #6
            Zitat von Uwe! Beitrag anzeigen
            Trotzdem die Frage, warum Version 1 gar nicht geht.
            Gute Frage.

            Fragst du den Fehler über's EibStudio oder über die Verarbeitungsfunktion ab?

            Es sollte unmittelbar nach dem ERR_MSGSND_MAIL_1 ein weiterer ERR_ERRNO kommen, der Aufschluss geben könnte.

            Kommentar


              #7
              über elog() im Programm. Anderer Fehler kam da nicht. Kann das ganze aber noch mal ohne elog() testen und die Events über EibStudio auslesen.

              Zum asynchronen Verarbeiten: Muss zugeben, dass ist im Handbuch zwischenzeitlich gut und nachvollziehbar beschreiben! Les ich halt nicht immer komplett durch ;-)
              ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

              Kommentar

              Lädt...
              X