OutlookEX UDF - Signaturen

  • Hallo,
    ich arbeite mit dem OutlookEX UDF.
    Ziel ist es, dass eine erzeugte E-Mail mit der Standardsignatur aus Outlook 2010 versehen wird.
    Derzeit löse ich die Situation durch eine oft-Vorlage.

    Leider bekomme ich die Signatur nicht über die Funktion _ol_MailSignatureSet(Default,Default) hin.
    Die Signatur besteht aus einem Bild und meinen Kontaktdaten. Verwenden möchte ich stets die Signatureinstellungen in Outlook für neue E-Mails.

    Im folgenden der Versuch den (mit _ol_MailSignatureGet Funktion auslesbaren) Signaturnamen direkt mit FileRead einzulesen und dem E-Mail-Body anzuhängen.
    Dann erscheint zwar der Text, jedoch das eigebettete Bild (Firmenlogo) wird nicht angezeigt. Es wird mit einem roten Kreuz quittiert.
    Der E-Mailtext ist stets im HTML-Format und kann beliebig lang sein.

    Im engl. Forum habe ich dieses gefunden: http://www.autoitscript.com/forum/topic/12…t/page__st__480

    Ich möchte jedoch im UDF bleiben. Deshalb die Frage: Wie wird die Funktion _ol_MailSignatureSet richtig angewendet?

    Spoiler anzeigen
    [autoit]


    #include <OutlookEX.au3>

    [/autoit] [autoit][/autoit] [autoit]

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

    [/autoit] [autoit][/autoit] [autoit]

    Global $sCurrentUser = $oOutlook.GetNameSpace("MAPI").CurrentUser.Name

    [/autoit] [autoit][/autoit] [autoit]

    $sSignature = _ol_MailSignatureSet(Default,Default)
    ;msgbox(0,"signature",@error&@crlf&@extended)

    [/autoit] [autoit][/autoit] [autoit]

    global $bn= FileOpen(@AppDataDir&"\Microsoft\Signatures\qwert - Logo.htm",0)
    $line=FileRead($bn)
    FileClose($bn)

    [/autoit] [autoit][/autoit] [autoit]

    _OL_ItemCreate($oOutlook, $olMailItem, "","", "Subject=Hallo Sub", "BodyFormat=" & $olFormatHTML, "HTMLBody=Test" & @crlf & $line, "To=" & $sCurrentUser)
    If @error Then
    MsgBox(16,"Fehler",@error&@crlf&@extended )
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(64, "OutlookEX UDF: Mail with Signature", "Mail successfully sent to user '" & $sCurrentUser & "'!")

    [/autoit] [autoit][/autoit] [autoit]

    _OL_Close($oOutlook)

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    Danke schon mal...

    Einmal editiert, zuletzt von qwert23 (19. Januar 2013 um 12:29)

  • Mit _OL_MailSignatureSet("Name der Signatur") definierst Du nur, welche Signatur für neue Mails verwendet werden soll.
    Die Signatur selbst erstellt Du mit _OL_MailSignatureCreate oder von Hand im Outlook.

  • Hallo Water,

    die Signatur ist in Outlook vorhanden (HTML mit Text und Logo). Ziel ist es nun, dass jede E-Mail mit der Signatur erstellt wird.
    Aus Deinen Beispielen kann ich nicht erkennen, wie die Signatur unter der ausgehenden E-Mail eingefügt wird.

    Du hattest mal dieses Beispiel (hier nur ein Auszug) veröffentlicht und erstaunlicherweise funktioniert hier die Signatur unter der E-Mail. Also so, wie es in Outlook eingestellt ist. Doch wie ist das mit den Aufrufen aus dem OutlookEX-UDF.

    [autoit]


    $oItem = $oOutlook.CreateItem(0)
    $oItem.BodyFormat = $olFormatHTML
    $oItem.GetInspector
    $sBody = $oItem.HTMLBody
    $oItem.HTMLBody = "<b>Mail</b> Text" & $sBody
    $oItem.Subject = "Subject"
    $oItem.Display

    [/autoit]

    Damit erscheint die Signatur unter der E-Mail, da dieses so in Outlook eingestellt ist.

    Nun erzeugt man eine E-Mail mit _OL_ItemCreate($oOutlook, $olMailItem.... und schon ist keine Signatur mehr vorhanden. Deshalb die Frage, wie das korrekt gehandhabt wird.
    Ist das so verständlich formuliert?

  • Schick die Mail mal ab und poste dann, ob die Signatur drin ist.

  • Ich habe nun dieses Beispiel verwendet und an mich selbst gesendet.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <Date.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local $olMailItem = 0
    Local $olFormatHTML = 2
    Local $olFormatRichText = 3
    Local $olImportanceLow = 0
    Local $olImportanceNormal= 1
    Local $olImportanceHigh = 2
    ;=====
    ; HTML
    ;=====
    $oOApp = ObjCreate("Outlook.Application")
    $oItem = $oOApp.CreateItem($olMailItem)

    [/autoit] [autoit][/autoit] [autoit]

    $oItem.BodyFormat = $olFormatHTML
    $oItem.GetInspector
    $sSignature = $oItem.HTMLBody
    $oItem.Importance = $olImportanceHigh
    $oItem.HTMLBody = "<span style=font-family:Calibri;font-size:11pt>" & _
    "The files in Directory" & _
    "<p>" & _DateTimeFormat(_DateAdd('d',+1, _NowCalcDate()),1) & " " & _Time() & @CRLF & $sSignature
    $oItem.Subject = "Subject"
    $oItem.Display

    [/autoit] [autoit][/autoit] [autoit]

    Func _Time()
    Local $hour = @HOUR, $AMPM = "AM"
    If $hour > 11 Then $AMPM = "PM"
    If $hour = 0 Then $hour = 12
    If $hour > 12 Then $hour -= 12
    Return $hour & ":" & @MIN & " " & $AMPM
    EndFunc ;==>_Time

    [/autoit]


    Die Signatur ist korrekt in der E-Mail vorhanden.

  • Ein weiterer Test in Kombination mit dem OutlookEx UDF und der direkten E-Mailerzeugung.

    Spoiler anzeigen
    [autoit]


    #include <OutlookEX.au3>

    [/autoit] [autoit][/autoit] [autoit]

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

    [/autoit] [autoit][/autoit] [autoit]

    Global $sCurrentUser = $oOutlook.GetNameSpace("MAPI").CurrentUser.Name

    [/autoit] [autoit][/autoit] [autoit]

    $oOApp = ObjCreate("Outlook.Application")
    $oItem = $oOApp.CreateItem($olMailItem)
    $oItem.BodyFormat = $olFormatHTML
    $oItem.GetInspector
    $sSignature = $oItem.HTMLBody

    [/autoit] [autoit][/autoit] [autoit]

    _OL_ItemCreate($oOutlook, $olMailItem, "","", "Subject=Hallo Sub", "BodyFormat=" & $olFormatHTML, "HTMLBody=Testsendung " & $sSignature, "To=" & $sCurrentUser)
    If @error Then
    MsgBox(16,"Fehler",@error&@crlf&@extended )
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(64, "OutlookEX UDF: Mail with Signature", "Mail successfully sent to user '" & $sCurrentUser & "'!")

    [/autoit] [autoit][/autoit] [autoit]

    _OL_Close($oOutlook)

    [/autoit]


    Nun wird die Signatur anzeigt, jedoch ohne Logo (siehe Anhang)

    Kann es sein, dass die Funktion _OL_ItemCreate den Body leert und dann den HTML-Text anzeigt?

  • Du mischt das UDF mit der direkten Verwendungen von COM. Wirf das eine oder das andere raus aus deinem Skript.

  • Hallo Water,
    die Mischung waren Versuche, um der Lösung näher zu kommen.
    Ziel ist es, dass die erzeugten E-Mails mit der Signatur aus Outlook (also so wie in Outlook voreigestellt) erzeugt werden.
    Im engeren Sinne wird die Anweisung _OL_MailSignatureSet gar nicht benötigt, wenn die Outlook 2010 Einstellungen verwendet werden. Dort habe ich eine Signatur für neue Nachrichten hinterlegt, die aus Firmenlogo und Text besteht.

    Im folgenden ein einfaches Script mit dem OutlookEx-UDF.


    Spoiler anzeigen
    [autoit]


    #include <OutlookEX.au3>

    [/autoit] [autoit][/autoit] [autoit]

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

    [/autoit] [autoit][/autoit] [autoit]

    Global $sCurrentUser = $oOutlook.GetNameSpace("MAPI").CurrentUser.Name

    [/autoit] [autoit][/autoit] [autoit]

    _OL_MailSignatureSet(Default, Default)

    [/autoit] [autoit][/autoit] [autoit]

    _OL_ItemCreate($oOutlook, $olMailItem, "","", "Subject=TestSubject Mail", "BodyFormat=" & $olFormatHTML, "HTMLBody=Testsendung", "To=" & $sCurrentUser)
    If @error Then
    MsgBox(16,"Fehler",@error&@crlf&@extended )
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(64, "OutlookEX UDF: Mail with Signature", "Mail successfully sent to user '" & $sCurrentUser & "'!")

    [/autoit] [autoit][/autoit] [autoit]

    _OL_Close($oOutlook)

    [/autoit] [autoit][/autoit] [autoit][/autoit]


    Es wird keine Signatur angezeigt.
    Aus dem Versuch mit direkter COM Anweisung erscheint die Signatur. Ich würde jedoch gern im UDF bleiben und deshalb meine Bitte um Unterstützung.

  • Hier wird beschrieben, wie es funktioniert und warum die bisherige Lösung keine Signatur anzeigt.

  • Nun habe ich mal einige weitere Varianten ausprobiert.
    Sobald im _OL_ItemCreate Angaben zum Body erfolgen, verschwindet die Signatur (Beispiel 2, 3, 4).
    Das Beispiel 5 ergänzt den _OL_ItemCreate-Aufruf um die Bodyinformationen. Dann wird die E-Mail exakt nach den Outlookeinstellungen (Signatur bei neuer Nachricht) erstellt. (siehe auch: http://www.autoitscript.com/forum/topic/12…t/page__st__480 )

    Somit ist eine Lösung erreicht. Allerdings kann ich nicht nachvollziehen, warum das nicht im Beispiel 2,3,4 funktioniert.


    Spoiler anzeigen
    [autoit]


    #include <OutlookEX.au3>

    [/autoit] [autoit][/autoit] [autoit]

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

    [/autoit] [autoit][/autoit] [autoit]

    Global $sCurrentUser = $oOutlook.GetNameSpace("MAPI").CurrentUser.Name

    [/autoit] [autoit][/autoit] [autoit]

    ; ----1.----------- Erzeuge E-Mail ohne Bodytext = Ergebnis: Signatur ist vorhanden
    _OL_ItemCreate($oOutlook, $olMailItem, "","", "Subject=TestSubject Mail - 1. "&@Hour&":"&@min&":"&@SEC, "To=" & $sCurrentUser)
    If @error Then
    MsgBox(16,"Fehler",@error&@crlf&@extended )
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ; -----2.---------- Erzeuge E-Mail mit Angabe des BodyFormat = Ergebnis: keine Signatur mehr vorhanden
    _OL_ItemCreate($oOutlook, $olMailItem, "","", "Subject=TestSubject Mail - 2."&@Hour&":"&@min&":"&@SEC, "BodyFormat=" & $olFormatHTML, "To=" & $sCurrentUser)
    If @error Then
    MsgBox(16,"Fehler",@error&@crlf&@extended )
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ; ---3.------------ Erzeuge E-Mail mit Angabe des HTMLBody = Ergebnis: keine Signatur mehr vorhanden
    _OL_ItemCreate($oOutlook, $olMailItem, "","", "Subject=TestSubject Mail - 3. "&@Hour&":"&@min&":"&@SEC, "HTMLBody=Testsendung ", "To=" & $sCurrentUser)
    If @error Then
    MsgBox(16,"Fehler",@error&@crlf&@extended )
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ; ---4.------------ Erzeuge E-Mail mit Angabe des HTMLBody + Format = Ergebnis: keine Signatur mehr vorhanden
    _OL_ItemCreate($oOutlook, $olMailItem, "","", "Subject=TestSubject Mail - 4."&@Hour&":"&@min&":"&@SEC, "HTMLBody=Testsendung ", "BodyFormat=" & $olFormatHTML,"To=" & $sCurrentUser)
    If @error Then
    MsgBox(16,"Fehler",@error&@crlf&@extended )
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ; --5.------------- Erzeuge E-Mail ergänzt durch COM Aufruf = Ergebnis: Signatur ist vorhanden
    $oItem = _OL_ItemCreate($oOutlook, $olMailItem, "","", "Subject=TestSubject Mail - 5. "&@Hour&":"&@min&":"&@SEC, "To=" & $sCurrentUser)
    If @error Then
    MsgBox(16,"Fehler",@error&@crlf&@extended )
    EndIf
    $oItem.BodyFormat = $olFormatHTML
    $oItem.GetInspector
    $sBody = $oItem.HTMLBody
    $oItem.HTMLBody = "<b>MailText als Test</b> Text in der E-Mail und Signatur" & $sBody

    [/autoit] [autoit][/autoit] [autoit]

    _OL_Close($oOutlook)

    [/autoit]
  • Das Problem liegt daran, dass die SIgnatur der Mail bei der Erstellung zugewiesen wird (damit man sie dann noch ändern kann).
    _OL_ItemCreate weist den übergebenen Properties den angegebenen Wert zu - und überschreibt somit die Signatur im Body.

    Daher: Mail mit Signatur geht nur mit Beispiel 5.

  • Habe im Wiki die Dokumentation entsprechend erweitert.