0

I am currently working on designing a fully functional automation software for my job using AutoIt. Everything is going great but I've run into a little issue using the _IECreateEmbedded function.

My Issue:

What this part of my program is supposed to do is embed Microsoft Outlook's webpage inside of a GUI. This part works just fine. The webpage is loaded just fine and everything is displayed as it should be. I am able to view the message titles and subjects on the left side of my screen like normal, HOWEVER, when I click on the message to open it to read, nothing happens. I am also unable to compose a new message or search my inbox. I assumed this had something to do with Outlook using a script that AutoIt doesn't commonly support, but I'm not entirely sure. I tried loaded GMail into the GUI and it works perfectly. Any ideas?

Here's my current code: (The important parts at least)

; Includes
#include <GUIConstantsEx.au3>
#include <IE.au3>
#include <WindowsConstants.au3>

; Create GUI Window
$windowMain = GUICreate("Embedded Outlook Client", 1001, 701, 242, 88, BitOR($WS_MAXIMIZEBOX,$WS_MINIMIZEBOX,$WS_SYSMENU,$WS_CAPTION,$WS_POPUP,$WS_POPUPWINDOW,$WS_GROUP,$WS_TABSTOP,$WS_BORDER,$WS_CLIPSIBLINGS))
; Display GUI
GUISetState(@SW_SHOW)

; Create an outline for the Embedded Browser
$guiEmailGroup = GUICtrlCreateGroup("", 8, 48, 801, 601)
; Initiate function
Local $oIE = _IECreateEmbedded()
; Created an embedded browser
$browserObj = GUICtrlCreateObj($oIE, 20, 60, 780, 580)
; Allow the browser to be resized if the window is maximized.
GUICtrlSetResizing ( $browserObj, $GUI_DOCKAUTO)
; Navigate to Outlook
_IENavigate($oIE, "https://outlook.office.com/owa/#path=/mail")

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Note: You will most likely need an Outlook account to be able to help with this solution. Any help would be GREATLY appreciated. Thank you in advance!

Timothy Bomer
  • 485
  • 5
  • 20
  • 3
    Why not use cdo.message? Relying on IE is a very bad idea. Attaching it on a GUI is even worst. – John P. Feb 27 '16 at 16:54
  • cdo.message? I'm not familiar with that function. I'm relying on IE because my company is contracted with Microsoft and I'm unable to use another browser at work. I've looked at some other methods instead of embedding it in a GUI but they all involved coding an entire mail client. That is something I do plan to do, but I wont be ready to do for a while. Could you give me an example of cdo.message? – Timothy Bomer Feb 29 '16 at 05:53

1 Answers1

1

This is a simple example of sending an email with cdo.message

Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance = "Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0)
    Local $objEmail = ObjCreate("CDO.Message")
    $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
    $objEmail.To = $s_ToAddress ; was $objEmail.To
    Local $i_Error = 0
    Local $i_Error_desciption = ""
    If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
    If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
    $objEmail.Subject = $s_Subject
    If StringInStr($as_Body, "<") And StringInStr($as_Body, ">") Then
        $objEmail.HTMLBody = $as_Body
    Else
        $objEmail.Textbody = $as_Body & @CRLF
    EndIf
    If $s_AttachFiles <> "" Then
        Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
        For $x = 1 To $S_Files2Attach[0]
            $S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x])
;~          ConsoleWrite('@@ Debug : $S_Files2Attach[$x] = ' & $S_Files2Attach[$x] & @LF & '>Error code: ' & @error & @LF) ;### Debug Console
            If FileExists($S_Files2Attach[$x]) Then
                ConsoleWrite('+> File attachment added: ' & $S_Files2Attach[$x] & @LF)
                $objEmail.AddAttachment($S_Files2Attach[$x])
            Else
                ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF)
                SetError(1)
                Return 0
            EndIf
        Next
    EndIf
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
    If Number($IPPort) = 0 Then $IPPort = 25
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
    ;Authenticated SMTP
    If $s_Username <> "" Then
        $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
        $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
    EndIf
    If $ssl Then
        $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    EndIf
    ;Update settings
    $objEmail.Configuration.Fields.Update
    ; Set Email Importance
    Switch $s_Importance
        Case "High"
            $objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "High"
        Case "Normal"
            $objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "Normal"
        Case "Low"
            $objEmail.Fields.Item("urn:schemas:mailheader:Importance") = "Low"
    EndSwitch
    $objEmail.Fields.Update
    ; Sent the Message
    $objEmail.Send
    If @error Then
        SetError(2)
        Return $oMyRet[1]
    EndIf
    $objEmail = ""
EndFunc   ;==>_INetSmtpMailCom
; Com Error Handler
Func MyErrFunc()
    $HexNumber = Hex($oMyError.number, 8)
    $oMyRet[0] = $HexNumber
    $oMyRet[1] = StringStripWS($oMyError.description, 3)
    ConsoleWrite("### COM Error !  Number: " & $HexNumber & "   ScriptLine: " & $oMyError.scriptline & "   Description: " & $oMyRet[1] & @LF)
    SetError(1); something to check for when this function returns
    Return
EndFunc   ;==>MyErrFunc

Now if you want to build an email client I don't know how much it could help. An other alternative could be WinHTTP.

John P.
  • 967
  • 1
  • 8
  • 28