_OL_Example_SentMail_Event

  • Spoiler anzeigen

    #include <OutlookEX.au3>

    HotKeySet("+!e", "_Exit") ;Shift-Alt-E to Exit the script

    MsgBox(64, "OutlookEX UDF Example Script", "Hotkey to exit the script: 'Shift-Alt-E'!")

    Global $oOApp = ObjCreate("Outlook.Application")

    Global $oItems = $oOApp.GetNamespace("MAPI").GetDefaultFolder($olFolderSentMail).Items

    ObjEvent($oItems, "oItems_")

    While 1

    Sleep(10)

    WEnd

    ; Outlook 2007 - ItemAdd event - http://msdn.microsoft.com/en-us/library/…fice.12%29.aspx

    Func oItems_ItemAdd($oOL_Item)

    MsgBox(64, "OutlookEX UDF Example Script", "Mail has been sent!" & @CRLF & @CRLF & _

    "Subject: " & $oOL_Item.Subject)

    EndFunc ;==>oOFolder_ItemAdd

    Func _Exit()

    Exit

    EndFunc ;==>_Exit

    Moin,

    die Anwendung funktioniert mit meinem Default Konto sehr gut.

    water, ich möchte den GetDefaultFolder auf ein anderes Konto mit Postausgang ändern.

    Habe es mit dem Pfad "*\Konto\Postausgang" versucht, komme aber nicht zum Ergebnis.

    Kannst Du mir helfen?

    Gruß

  • Sollte eigentlich funktionieren (wie hier beschrieben: https://docs.microsoft.com/en-ca/office/v…etdefaultfolder).

    Kannst Du mal Dein Skript posten?

  • Spoiler anzeigen

    Local $Ir_Konto ="Email@..."

    Local $Betreff = "Morgen"

    Local $sAdresse = "Hallo@...."

    Local $sNachrText = Sehr...."

    Local $sBody = "Wetter ist..."

    Local $SaveAsMail = "D:\"

    Global $oOutlook = _OL_Open()

    _OL_MailSignatureSet("entsel-2", "")

    $oItem = _OL_ItemCreate($oOutlook, $olMailItem, "", "", "Subject=" & $Betreff)

    Local $aRecipients ;empfänger_1

    If $sAdresse <> "" Then

    $aRecipients = StringSplit($sAdresse, ";", 2)

    _OL_ItemRecipientAdd($oOutlook, $oItem, Default, $olTo, $aRecipients)

    EndIf

    For $oAccount In $oOutlook.Session.Accounts

    If $oAccount.SMTPAddress = $Ir_Konto Then

    $oItem.SendUsingAccount = $oAccount

    ExitLoop

    EndIf

    Next

    $oItem.BodyFormat = $olFormatHTML

    $oItem.GetInspector

    $sBody = $oItem.HTMLBody

    $oItem.HTMLBody = $sNachrText & $sBody

    _OL_MailSignatureSet("entsel-1", "entsel-1")

    $oItem.Display

    SendMailEvent()

    Func SendMailEvent()

    Global $oOApp = ObjCreate("Outlook.Application")

    Global $oItems = $oOApp.GetNamespace("MAPI").GetDefaultFolder($olFolderSentMail).Items

    ObjEvent($oItems, "oItems_")

    EndFunc ;==>SendMailEvent

    Func oItems_ItemAdd($oOL_Item)

    _OL_ItemSave($oOApp, $oOL_Item, Default, $SaveAsMail, $olMSGUnicode, 1 + 16)

    EndFunc

    Das Beispiel wäre für das Default Konto. Es soll jetzt "SendMailEvent" mit dem "$Ir_Konto" funktionieren.

  • Habe es mit dem Pfad "*\Konto\Postausgang" versucht, komme aber nicht zum Ergebnis.

    "*" wird immer durch das Standardkonto ersetzt. Daher funzt das nicht.

    Kannst Du bitte in Worten beschreiben, was Du erreichen willst? Vielleicht sind Events da nicht die optimale Lösung?

  • Eh. Mir geht es aber um das "Warum". Sobald ich das verstanden habe, kann ich Dir sagen, ob die Lösung über Events ein geeigneter Ansatz ist oder ob andere Wege auch zum Ziel führen :)

  • Die geöffnete Mail wird natürlich beschrieben und soll dann mit Betätigen des Senden Buttons in Outlook als *.msg gespeichert werden.

    Also als Senden Event.

    Ich denke, dass es so zu verstehen ist und Du es auch am obigen Script sehen könntest.;)

  • Ich denke, dass es so zu verstehen ist und Du es auch am obigen Script sehen könntest.

    Könnte ich. Aber es führen viele Wege nach Rom. Das gepostete Skript ist nur einer davon. Welche weiteren Wege möglich sind und welcher davon wirklich zum Ziel führt bzw. einfacher zu gehen ist, erfahre ich nur, wenn ich das Ziel kenne. Und daher frage ich nach, was das Ziel ist, bevor der erste Schritt getan wird.

    Oder wie Helmut Qualtinger in seinem Lied "Der Halbwilde" singt: "I hob zwoar ka ohnung wo i hinfoahr, aber dafür bin i gschwinder duat". Das soll vermieden werden.

  • So funktioniert es bei mir:

  • water , vielen Dank!

    Klappt auch bei mir prima. :)

    Habe noch eine Frage.;)

    Ich importiere mit Deinen Funktionen, Termine in den Outlook Kalender, was auch super funktioniert.

    Spoiler anzeigen

    Local $aFolder = _OL_FolderAccess($oOL, $OutlookKalender & $aAnwender[$i], $olFolderCalendar)

    If @error Then

    MsgBox($MB_ICONERROR, "Error", "_OL_FolderAccess returned @error = " & @error & ", @extended = " & @extended, 0, $tsn_ST_Main)

    Return

    EndIf

    Local $aResult = _OLT_iCal_VEvent_Import($oOL, $aFolder[1], $siCalPath, "_iCal_Callback", BitOR($iOLT_DebugConsole, $iOLT_DebugProperties))


    Die Anwendung zur Erstellung läuft über ein gemeinsames Netzlaufwerk für mehrere Benutzer zugänglich.

    Ist es möglich, einen mit Deinern Funktionen importierten Termin, auch in den OutlookKalender der anderen Benutzer zu importieren?

    Leider ist der Name der Variable $OutlookKalender überall identisch. = \\Outlook-Datendatei\Kalender

  • Verwendet Ihr Exchange als Mailserver? Falls ja, könnte man das auch über einen Gruppenkalender regeln. Du importierst die Termine in den Gruppenkalender und alle mit Zugriff auf diesen Gruppenkalender sehen ihn sofort.
    Oder muss er unbedingt in den persönlichen Kalender von jedem User?

  • Zitat

    Verwendet Ihr Exchange als Mailserver? Falls ja, könnte man das auch über einen Gruppenkalender regeln. Du importierst die Termine in den Gruppenkalender und alle mit Zugriff auf diesen Gruppenkalender sehen ihn sofort.

    Nein, er muss in den persönlichen Kalender des Users.

  • Aber wenn jeder Dein Skript über das Netzwerklaufwerk aufruft, dann braucht es keine Anpassung im Skript

    Das Skript importiert ja in den Kalender des Standardkontos.

    Wenn Du aber die Termine in alle Kalender schreiben willst, dann brauchst Du natürlich die entsprechenden Berechtigungen.
    Dann kannst Du über _OL_FolderAccess auf die Kalender zugreifen und die Termine dann importieren.

  • Zitat

    Du über _OL_FolderAccess auf die Kalender zugreifen

    water, danke, natürlich! :)

    Mache ich ja für die anderen, die speziell den Termin sehen sollen, mit der Schleife "$OutlookKalender & $aAnwender[$i]" auch.

    Manchmal, wie war das mit dem Bäumen und der Axt........^^

  • :)

  • water, kannst Du mir nochmal mit den Berechtigungen helfen?

    Spoiler anzeigen

    "Global $aFolder = _OL_FolderAccess($oOutlook, "Test@Outlook.de\\Kalender")

    Kann ich die Berechtigung (Kalender) für den anderen User in den Pfad mit einbinden?

  • Ich kenne es so, dass die Berechtigungen auf dem Postfach selbst vergeben werden (d.h. wer darf mit welchen Funktionen auf das Postfach zugreifen).

  • _OL_ItemFind bzw. _Ol_ItemSearch durchsuchen jeweils nur einen Folder. Willst Du mehrere Kalender durchsuchen, musst Du zuerst mit _OL_FolderAccess darauf zugreifen und jeden Folder dann durchsuchen.

  • water , ich möcht den Kalendername auslesen, z.B. "Katharina" wie im Bild dargestellt.

    Spoiler anzeigen

    Local $aOL_Item = _OL_ItemFind($oOL, $OutlookKalender, $olAppointment, "", "Subject", $Betreff_GK, "EntryID,Subject,Location,Body,Start,End,LastModificationTime", "", 1)

    _ArrayDisplay($aOL_Item, "_OL_ItemFind")

    _OL_ItemFind gibt mir ja sonst alles zurück was ich benötige

    Vielleicht fehlt mir nur der Ausdruck der Darstellung.

    Kannst du mir auf die Sprünge helfen?