OutlookEX Mail automatisch senden

  • Das Sleep von 10 auf 10000 setzen... erhöht aber die Wahrscheinlichkeit extrem, das Windi vor Erhalt der Mail bereits verstorben ist.

    Da Sleep in Millisekunden angegeben wird, wird er die 10 Sekunden sicher überleben :)

  • Nötig wären dann aber zwei Timer... denn es ja nicht bekannt, wie lange es dauert, bis Outlook die Mail in den Ordner Postausgang verfrachtet hat... denn wenn zu früh geprüft wird, ob der Ordner leer ist, wird das ein Schuss ins eigene Knie.

    Nur SendReceive ist asynchron. Send allein nicht. D.h. wenn Send erfolgreich war, dann liegt die Mail im Ausgangsordner. Eine Schleife n-mal durchlaufen, vor jedem Schleifendurchlauf m Sekunden warten und dann abbrechen würde eine Ewigkeitsschleife verhindern.

  • Da Sleep in Millisekunden angegeben wird, wird er die 10 Sekunden sicher überleben

    Hehe... oh ja, ich werde alt... ne, ich bin alt, und senil! :D

    Habe nun auch herausgefunden, wie ich den Postausgang überprüfe... schön zu wissen, aber nicht relevant für mich, da ich mit Thunderbird hantiere. 8o

    Einmal editiert, zuletzt von Bitnugger (4. Juni 2020 um 02:32)

  • Ich habe noch ein wenig experimentiert, denn es war mir zu grobschlächtig, mehrmals den kompletten Inhalt des Postausgangs/Posteingangs als Array zu holen, um mit _ArraySearch zu überprüfen, ob die gesuchte Mail darin enthalten ist.

    So kann man den kompletten Inhalt holen:

    $aItems = _OL_ItemFind($oOutlook, "*\Posteingang", $olMail, "", "", "", "", "", 2) ; EN = *\Inbox

    $aItems = _OL_ItemFind($oOutlook, "*\Postausgang", $olMail, "", "", "", "", "", 2) ; EN = *\Outbox

    So bekommt man jedoch nur die gesuchte Mail geliefert, insofern sie vorhanden ist:

    $aItems = _OL_ItemFind($oOutlook, "*\Posteingang", $olMail, "[Subject]='" & $sSubject & "'", "", "", "", "", 2) ; EN = *\Inbox

    $aItems = _OL_ItemFind($oOutlook, "*\Postausgang", $olMail, "[Subject]='" & $sSubject & "'", "", "", "", 2) ; EN = *\Outbox

    Jetzt bin ich allerdings sehr erstaunt, dass die zweite Variante nur dann funktioniert, wenn die Outlook.exe gestartet wurde, bevor das Objekt $oOutlook mit _OL_Open() erstellt wird!

    Hier liefert mir _OL_ItemFind folgende Fehlermeldung: @error = 3, @extended = 4

    ; @error |3 - Error accessing the specified folder. See @extended for errorcode returned by _OL_FolderAccess

    ; @extended |4 - Specified folder could not be found. @extended is set to the index of the subfolder in error (1 = root folder)

    Die Mail wird aber versandt... ich kann nur nicht via OutlookEX UDF darauf zugreifen.

    water , hast du eine Idee bzw. weißt du, warum das so ist?

    Das Script dazu (_OL_Mail_senden.au3) findet ihr im Anhang. Hier muss die Variable $sMeineMailadresse gesetzt werden.

    Wenn ich allerdings mit _OL_Check_InOutbox.au3 eine bereits vorhandene Nachricht abfrage, funktioniert die zweite Variante auch ohne dass Outlook gestartet wird. Hier muss die Variable $sSubject vor dem Start korrigiert werden.

  • Ich vermute mal, dass diese Outlook Spezialität hier zuschlägt:

    "Outlook (starting with Outlook 2007 SP2) shuts itself down if there is no open window (which is always true when Outlook was not running when _OL_Open is being called) and there is no open reference to an Outlook item (mail, appointment ...)."

  • Ich vermute mal, dass diese Outlook Spezialität hier zuschlägt:

    Hehe... ja, das wird es wohl sein! Direkt nach _OL_Open wird die Outlook.exe mit ProcessExists gefunden, ist dann aber schnell wieder verschwunden.

    Tzzz... nun ja, man muss ergo sicherstellen, das die Outlook.exe bereits gestartet wurde, bevor man mit _OL_* arbeitet.

  • Es genügt aber auch, dafür zu sorgen, dass der zweite Teil des Satzes nicht zutrifft: " ... there is no open reference to an Outlook item (mail, appointment ...)."

    Das heißt, wen z.B. das über _OL_ItemCreate erstellte und zurückgegebene Objekt nicht gelöscht wird.

    Ist aus meiner Sicht der elegantere Ansatz.

  • Ich hab das jetzt mal so für mich gelöst.

    Es funktioniert auch.

    Es ist zwar nicht die feine Art.

    Es wird euch bestimmt auch nicht gefallen.

    Gruß Windi

    Code
          _OL_ItemSend ( $oOutlook , $oItem )  ; sendet ohne nachfrage
          _OL_Close ( $oOutlook )
          
          Local $oOutlook = _OL_Open()
          Sleep (3000)
          _OL_ItemSendReceive($oOutlook, True)
          Sleep (3000)
          _OL_Close ( $oOutlook )
  • Solange $oItem referenziert wird, beendet Outlook nicht. Das sollte also auch funktionieren (ungetestet):

    Code
    _OL_ItemSend($oOutlook, $oItem)  ; sendet ohne nachfrage
    _OL_ItemSendReceive($oOutlook, True)
    Sleep(3000)
    _OL_Close($oOutlook)
  • So funktioniert es nicht.

    Ich denke Outlook muss erst geschlossen sein und dann wieder geöffnet.

    Dann kommt auch dieses Fenster "Outlook Nachrichtenübermitlung"

  • Ok - lässt sich bestimmt lösen - wie alle Outlook-Probleme bisher.
    Die eigentliche Frage ist: Wie ist Dein Outlook konfiguriert, dass es Mails nicht sofort versendet und warum (schlechte Datenverbindung ...)?

  • Bei _OL_ItemFind bekomme ich die ersten 1-3 mal den @error 1001... davor wird _OL_ItemSend und _OL_ItemSendReceive ausgeführt, dann wird 1 Sekunde gewartet. 1 Sek. scheint wohl zu wenig zu sein, aber warum passiert das?

    Code
    > _OL_ItemFind($oOutlook = Object, "*\Postausgang       ", 43, "[Subject]='Telefonnummern Kunden Tour 1 04.06.2020 23:00:42'", "", "", "", "", 2) @error = 1001, @extended =    0 $iOutlook_PID = 17060
    - _OL_ItemFind($oOutlook = Object, "*\Gesendete Elemente", 43, "[Subject]='Telefonnummern Kunden Tour 1 04.06.2020 23:00:42'", "", "", "", "", 2) @error =    0, @extended =    0 $iOutlook_PID = 17060
    > _OL_ItemFind($oOutlook = Object, "*\Postausgang       ", 43, "[Subject]='Telefonnummern Kunden Tour 1 04.06.2020 23:00:42'", "", "", "", "", 2) @error = 1001, @extended =    0 $iOutlook_PID = 17060
    - _OL_ItemFind($oOutlook = Object, "*\Gesendete Elemente", 43, "[Subject]='Telefonnummern Kunden Tour 1 04.06.2020 23:00:42'", "", "", "", "", 2) @error =    0, @extended =    0 $iOutlook_PID = 17060
    > _OL_ItemFind($oOutlook = Object, "*\Postausgang       ", 43, "[Subject]='Telefonnummern Kunden Tour 1 04.06.2020 23:00:42'", "", "", "", "", 2) @error =    0, @extended =    0 $iOutlook_PID = 17060
    - _OL_ItemFind($oOutlook = Object, "*\Gesendete Elemente", 43, "[Subject]='Telefonnummern Kunden Tour 1 04.06.2020 23:00:42'", "", "", "", "", 2) @error =    0, @extended =    0 $iOutlook_PID = 17060
  • Wie ist Dein Outlook konfiguriert, dass es Mails nicht sofort versendet und warum (schlechte Datenverbindung ...)?

    Outlook ist normal konfiguriert.

    3 Konten 1&1, GMX und Strato

    5 Regeln zum automatischen sortieren in verschiedene Mail-Ordner.

    PC an Lan 100er Leitung

    Am Laptop:

    1 Konto bei GMX

    und keine Regeln

    an WLan

    beide verhalten sich gleich.

    War es das was du wissen wolltest.

  • Genau. Datei -> Optionen -> Erweitert -> Senden und Empfangen -> Button "Senden/Empfangen..." drücken. Hier findest Du dann die entspr. Einstellungen. Hier sollte immer "Diese Gruppe bei der Übermittlung mit einbeziehen (F9)" aktiviert sein.