OutlookEX Mail automatisch senden

  • Guten Morgen,

    ihr Experten.

    hab da mal eine Frage.

    Kann man mit der OutookEx eine Mail senden, ohne das man nochmal extra Outlook öffnen muß.

    Gruß

    Windi


  • Kann man mit der OutookEx eine Mail senden, ohne das man nochmal extra Outlook öffnen muß.

    Wenn du eine Frage stellst, dann sollte der Satz auch mit einem Fragezeichen enden...

    Und ja, sicher geht das, sonst würde die OutookEx doch keinen Sinn machen.

    Outlook wird durch diese Zeile geöffnet:

    Global $oOutlook = _OL_Open()

    Globale Variablen haben übrigens nichts in einer Funktion zu suchen, da sollten nur Lokale Variablen deklariert werden.

  • _OL_ItemSend versendet doch die Mail?!

  • Danke für die schnelle Rückmeldung.

    _OL_ItemSend versendet doch die Mail?!

    Hab es mit _OL_ItemSend probiert.

    Es funktioniert nur, wenn ich Outlook öffne und (senden und empfangen) drücke.

    Kann man es auch so einstellen, das es ohne Outlook zu öffnen sendet??????

    Ps.

    Global wurde duch Local ersetzt.

    Ich hoffe ihr seid jetzt zufrieden mit mir.

    Gruß

    Windi

  • Outlook muss immer gestartet sein, damit die UDF mit Outlook arbeiten kann (der Motor Deines Autos muss auch laufen, damit Du damit fahren kannst ;) )

    Dies läuft wie folgt:

    • Du rufst _OL_Open auf, damit die nachfolgenden Funktionen mit Outlook arbeiten können.
      • Fall 1: Falls Outlook bereits läuft, dann hängt sich _OL_Open an die laufende Instanz von Outlook
      • Fall 2: Läuft Outlook nicht, dann wird Outlook im Hintergrund gestartet
    • Du rufst _OL_Close auf, wenn Du mit der Verarbeitung fertig bist.
      • Bei Fall 1 beendet _OL_Close die Verbindung zu Outlook, lässt die Instanz aber laufen
      • Bei Fall 2 beendet _OL_Close die Verbindung zu Outlook und schließt die Hintergrundinstanz von Outlook

    Zu Deinem Problem:

    _OL_ItemSendReceive sendet und empfängt alle ausstehenden Mails.
    Dies ist dann hilfreich, wenn Outlook z.B. so eingestellt ist, dass es nur alle 3 Std Mails sendet/empfängt, Du aber eine Mail sofort absenden musst!

  • Hallo Water,

    ich habe das jetzt so eingefügt:

    _OL_ItemSend ( $oOutlook , $oItem ) ; sendet ohne nachfrage

    _OL_ItemSendReceive($oOutlook, True)

    _OL_Close ( $oOutlook )

    ist es sinnvoll, Outlook zuerst mit Run zu starten.

    Die Mail soll ja aufs Handy!

    Wenn sie über Outlook nicht versendet wird, kann sie ja auch nicht am Handy erscheinen.

  • ist es sinnvoll, Outlook zuerst mit Run zu starten.

    Nee. Das macht alles die OutlookEX UDF.
    Wohin die Mail geht (Handy etc.) hängt davon ab, mit welchem Account (=Empfänger) du das Handy synchronisierst.

  • :)

  • If StringLen($aTermine[$i][3]) = 4 Then
    $sBody &= "0" & $aTermine[$i][3] & " " & $aTermine[$i][4] & "<br>" ; PLZ Ort 4 stellig mit 0
    Else
    $sBody &= $aTermine[$i][3] & " " & $aTermine[$i][4] & "<br>" ; PLZ Ort 5 stellig
    Endif

    Das kannst du auch viel einfacher machen:

    AutoIt
    $sBody &= StringRight("0" & $aTermine[$i][3], 5) & " " & $aTermine[$i][4] & "<br>"   ; PLZ Ort immer 5-stellig, anderfalls mit führender 0: Bsp.: 2151 ===>>> 02151

    Local $Meldung = GUICtrlCreateLabel("", $Poslinks - 150, $Poshoch +500, 550, 30)
    Local $Meldung = GUICtrlCreateLabel("Mail versendet an " &$Mailadress , $Poslinks - 100, $Poshoch + 500, 600, 30)

    Hier verwendest du für beide Labels dieselbe Variable... das macht keinen Sinn! Zudem sind sie die beiden Zeilen an dieser Stelle schlecht platziert... denn du willst die Labels ja sicher nicht in der Outlook-GUI erzeugen, was so auch nicht ginge, oder?

    Die Labels werden somit bei jedem Funktionsaufruf erzeugt... die erzeugt man vorher. Dann brauchst du in der Funktion _Mail_senden() nur den den Status und den Text entsprechend setzen.

    So z.B.:

    GUISetFont(18) sollte auch nicht in der Funktion _Mail_senden() stehen.

    GUICtrlSetColor ($Meldung , $COLOR_Green)

    Tja, für welches der beiden Labels wird sich GUICtrlSetColor wohl entscheiden? ;)

    Von GUICtrlCreateLabel bekommst du eine Control-ID zurück... das würde ich immer als Kürzel im Variablennamen kenntlich machen:

    AutoIt
    Local $idMeldung_01 = GUICtrlCreateLabel("", $Poslinks - 150, $Poshoch +500, 550, 30)
    Local $idMeldung_02 = GUICtrlCreateLabel("Mail versendet an " &$Mailadress , $Poslinks - 100, $Poshoch + 500, 600, 30)
    GUICtrlSetColor($idMeldung_01, $COLOR_Green)
    GUICtrlSetColor($idMeldung_02, $COLOR_Green)

    Wobei hier der erste Labels keine für mich ersichtliche Funktion hat, denn er zeigt ja keinen Text an...

    Mail_senden() ... eigenen Funktionen solltest du immer ein _ voransetzen, damit sie besser von den nativen Funktionen zu unterscheiden sind. Also: _Mail_senden()

    Es ist ja schon mal prima, das du deinen Code in Code-Tags setzt... wenn du die Sytax-Hervorhebung nun noch auf AutoIt setzt, bekommst du 100 von 100 möglichen Punkten! 8o

    Einmal editiert, zuletzt von Bitnugger (2. Juni 2020 um 23:16)

  • Hallo Bitnugger,

    Danke für dein Bemühungen.

    In der Gui werden mehrere Labels 2 Zeilig angezeigt.

    1. Zeile z. B. "Bitte warten......."

    2. Zeile "Daten werden verarbeitet"

    manchmal auch nur 1 zeilig dann wird die 1. Zeile gelöscht

    und die 2. Zeile geändert.

    Aus diesem Grund ist da auch kein Text drin.

    Local $Meldung = GUICtrlCreateLabel("", $Poslinks - 150, $Poshoch +500, 550, 30)

    Es ist vielleicht etwas einfach, aber es funktioniert.

    Die Meldungen sind alle in: GUISetFont(18).

    Code-Tags ==> Ein bisschen übersichtlich, muss ich es schon haben, sonst blicke ich überhaupt nicht mehr durch.


    Du hast das 2 mal drin ist das so korrekt.

    Code
        ;$oItem.display ; zeigt die Mail Kontrolle
        _OL_ItemSend($oOutlook, $oItem)      ; sendet ohne nachfrage
        _OL_ItemSend($oOutlook, $oItem)      ; sendet ohne nachfrage
    Code
      _OL_ItemSendReceive($oOutlook, True)

    Das hab ich so probiert funktioniert aber nicht wenn Outook nicht voher offen ist.

    Und wenn es offen ist muss ich trotzdem nochmal

    "Senden/Empfangen" drücken bis die Mail kommt.

    Gruß Windi

  • Du hast das 2 mal drin ist das so korrekt.

    Nein, habe es korrigiert...

    Das hab ich so probiert funktioniert aber nicht wenn Outook nicht voher offen ist.

    offen ist... du meinst, wenn es nicht angezeigt wird? Denn gestartet wurde es ja... mit:

    Code
        Local $oOutlook = _OL_Open()
        If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF", "Error creating a connection to Outlook. @error = " & @error & ", @extended = " & @extended)

    Ich habe das jetzt mal so bei mir getestet...

    ...und die Mail kommt an!

    So sieht der Inhalt dann aus:

    Vorname Name 1

    Straße 1

    PLZ 1 Ort 1

    Privat: Telefonnr 1

    Firma: Telefonnr 2

    Mobil: Handy 1

  • Wir reden schon noch von Deiner Mail senden Funktion aus Post #1?
    Dann ist Outlook ja bereits offen und die Mail sollte sofort gesendet werden (außer Du hast Outlook anders eingestellt).

    _OL_ItemSendReceive läuft leider asynchron d.h. es wird nicht auf die Fertigstellung des Befehls gewartet.

    Baue doch nach _OL_ItemSendReceive und vor _OL_Close ein Sleep von z.B. 10 Sekunden ein.

  • _OL_ItemSendReceive läuft leider asynchron d.h. es wird nicht auf die Fertigstellung des Befehls gewartet.

    Baue doch nach _OL_ItemSendReceive und vor _OL_Close ein Sleep von z.B. 10 Sekunden ein.

    Das ist dann natürlich tückisch... ich würde das _OL_Open/_OL_Close aber auch nicht in der Funktion _Mail_senden platzieren, sondern es etwa so machen:

    Einmal editiert, zuletzt von Bitnugger (3. Juni 2020 um 19:27)

  • Ich würde das Sleep von 10 auf 10000 setzen damit erwas länger gewartet wird ;)

    Ah ja: _Main musst Du noch irgendwo aufrufen :)

    Eine weitere Möglichkeit statt Sleep wäre es, den Ordner Postausgang auf Inhalt zu prüfen. Sobald er leer ist, müssten eigentlich alle Mails gesendet sein.

  • Ah ja: _Main musst Du noch irgendwo aufrufen :)

    Ok, da muss ich dir wohl zustimmen... habe es korrigiert. 8o

    Eine weitere Möglichkeit statt Sleep wäre es, den Ordner Postausgang auf Inhalt zu prüfen. Sobald er leer ist, müssten eigentlich alle Mails gesendet sein.

    Die Idee kam mir auch... doch auch hier muss ein Abbruch-Timer gesetzt werden, damit es nicht zur Endlosschleife wird, falls Outlook die Mail, aus welchen Gründen auch immer, nicht verschicken kann. 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. Und um ganz sicher zu gehen, reicht es nicht aus, zu prüfen, ob der Ordner leer ist... es muss geprüft werden, ob genau diese Mail nicht mehr im Ordner ist. Würde mich aber schon interessieren, wie man das prüfen kann...

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

    Einmal editiert, zuletzt von Bitnugger (3. Juni 2020 um 20:12)

  • Konnte mich noch nicht mit der OulookEx befassen.

    Hatte Probleme mit der GPX Datei.

    z.B. beim Ort: Frankfurt / Main

    das mag gpx überhaupt nicht das hatte ich ihm abgewöhnt.

    Müller GmbH CO. KG mag er auch nicht.

    Muss jetzt mal testen wie sich das mit - & usw verhält.

    Gruß Windi