Jump to content
Sign in to follow this  

[SOLVED] How to connect to a different outlook inbox?

Recommended Posts

Hello everyone, I am wondering if and how it is possible to connect my AutoIt script to a different email in my outlook. I have two different accounts when I open outlook. The first which my script always connects to is my own email while the second is a group email account. How or can I make the script connect to the second one and access its inbox instead of mine? This is all work related so no funny business here. 

Global $oOutlook = _OL_Open()

; Store all the Unread emails into an array
Global $aItems = _OL_ItemFind($oOutlook, "*\Outlook-UDF-Test", $olMail, _
"[UnRead]=True", "Subject", "Maintenance Request from Eagle's Nest", "EntryID,Subject", "", 1)

; Display the array of unRead emails
If IsArray($aItems) Then
    ;_ArrayDisplay($aItems, "OutlookEX UDF: _OL_ItemFind - Unread mails")

    MsgBox(48, "OutlookEX UDF: _OL_ItemFind Example Script", _
    "Could not find an unread mail. @error = " & @error & ", @extended: " & @extended)

; Get the number of unread emails
Global $numberOfUnRead = UBound($aItems, $UBOUND_ROWS) - 1
;MsgBox("", "Number of Unread emails", $numberOfUnRead)
ConsoleWrite("Number of unread emails: " & $numberOfUnRead & @CRLF)

I might be missing some code in the post but my code works It's just so long I don't want to post all 2300+ lines. 

Thank you for the help I greatly appreciate this community. 

Edited by nooneclose

Share this post

Link to post
Share on other sites

Well I am using 2 different accounts registered in the same OutLook instance, and I get to see both accounts emails inside the same Inbox folder...

Share this post

Link to post
Share on other sites

Thank you for getting back with me, but how do I tell my script to access the emails in the box named "Outlook-UDF-Test" under the second (email/group account)?

Edited by nooneclose

Share this post

Link to post
Share on other sites

Here the code I use to see both accounts (2 different emails). The column To is one easy way to know which account is involved.

#include <Constants.au3>
#include "OutlookEX\OutlookEX.au3"

Opt ("MustDeclareVars", 1)

Global $oOutlook = _OL_Open(True,@ScriptDir & "\OutlookEX\_OL_Warnings.exe",10)
If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF", "Error creating a connection to Outlook. @error = " & @error)

Global $aFolder = _OL_FolderAccess($oOutlook, "", $olFolderInbox)
If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF", "Error accessing the default contacts folder. @error = " & @error)

Global $aItems = _OL_ItemFind($oOutlook, $aFolder[1], $olMail, "", "", "", "EntryID,SenderEmailAddress,SenderName,Subject,To", "", 1)

Global $oItem = _OL_ItemGet($oOutlook, $aItems[1][0], Default, -1)
If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF", "Error accessing properties. @error = " & @error)
$oItem.Unread = True

If IsArray($aItems) Then
  _ArrayDisplay($aItems, "OutlookEX UDF: _OL_ItemFind Example Script")
  MsgBox(48, "OutlookEX UDF", "Could not find an unread mail. @error = " & @error)


Win 7 - Outlook 2003.  You must tell Outlook to put both accounts in same folder.

Edited by Nine

Share this post

Link to post
Share on other sites

Use _OL_Folderaccess to access a folder in another mailbox. The example script provided with the UDF explains how. 

My UDFs and Tutorials:


Active Directory (NEW 2020-10-10 - Version - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2020-12-15 - Version - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2020-06-27 - Version - Download
Outlook Tools (2019-07-22 - Version - Download - General Help & Support - Wiki
ExcelChart (2017-07-21 - Version - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
Task Scheduler (2019-12-03 - Version - Download - General Help & Support - Wiki

ADO - Wiki, WebDriver - Wiki


Share this post

Link to post
Share on other sites

I still do not understand. I looked into the Outlook UDF and tried @Nine code but I can not figure it out. :( Here is an edited / "made up" picture of the folder I am trying to create / access in outlook. 


I am trying to create and access the "Outlook-UDF-Test" folder under the account "m" and put it in that account's inbox. I can create the "Outlook-UDF-Test" folder under the "a" account just fine. I do not get why putting it under "m" is not working. What am I not understanding?  

Share this post

Link to post
Share on other sites

I found another solution that works. This may not be the best way but it works for me for now. Since I could not figure out how to make _OL_Open create the Outlook-UDF-Test folder under the account "M", because "M" is not the default, I changed my outlook account settings to make "M" the default E-mail and the default data files. My  2,400+ line email AI is able to work its magic again. Thank you very much for your time and effort @water and @Nine. If either of you have any more tips or code I could try I would love to make this process a 100% AutoIt script.   

Share this post

Link to post
Share on other sites

I was able to use the code below to access the other email account (that I had permission and access to use. It was not a public account). Special thanks to @water for making this more clear to me. 

$aFolder = _OL_FolderAccess($oOutlook, "WorkEmail@hotmail.com", $olFolderInbox) ; This format is language independant

I was also able to use this code (shown below) to double-check and see if it worked for what I was trying to do. (And it did :) 

Global $aItems = _OL_ItemFind($oOutlook, "*", $olMail, "[UnRead]=True", "Subject", "Work Request", "EntryID,Subject", "", 1)

; Display the array of unRead emails
_ArrayDisplay($aItems, "OutlookEX UDF: _OL_ItemFind - Unread mails")

Global $numberOfUnRead = UBound($aItems, $UBOUND_ROWS) - 1
ConsoleWrite("Number of unread emails: " & $numberOfUnRead & @CRLF)


Edited by nooneclose

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By MiKa666
      Hi all,
      I'm developing a tool for exploratively testing another software. For that I wanna cover all the GUI functionality from that software and verify everything works as intended. But now I've a problem which I couldnt solve so far.
      One thing that software I'm testing does, is to load up either a single picture or a series of pictures. Depending on how much pictures got loaded, further actions will be proceeded...
      This loaded pictures are schon within a ToolbarWindow and they're clickable. What I need to know is, how much pictures are in this ToolbarWindow...
      Can anybody provide me a tip on how to achive this?
      Would be amazing!!
    • By meety
      wingettext function can get the text content of the IE browser page, but the text content of the page cannot be obtained in the chrome browser? What should I do?
    • By DirtyJohny
      Hi everyone.Need rewrite this function how in еxample.
      #RequireAdmin #NoTrayIcon Opt("MustDeclareVars",1) Func _a() Local $sls=ObjGet("winmgmts:{impersonationLevel=impersonate," _ &"authenticationLevel=Pkt}!\\"& _ @ComputerName&'\root\wmi'),$lss=$sls.ExecQuery _ ('SELECT * FROM WmiMonitorID'), _ $lll,$sll,$sss="",$lsl,$lls,$i,$z For $z In $lss $lsl=$z.UserFriendlyName For $i=0 To Ubound($lsl)-1 if ($lsl[$i]) Then $lll&=Chr($lsl[$i]) Next $lls=$z.SerialNumberID For $i=0 To Ubound($lls)-1 if ($lls[$i]) Then $sll&=Chr($lls[$i]) Next $sss&="Model"&@TAB&@TAB&": "&$lll&@CR&"Serial Number"&@TAB&": "&$sll&@CR&@CR $lll="" $sll="" Next MsgBox(262144,'Monitors '&$lss.Count,$sss&" "&@CR) $lss=Null $sls=Null EndFunc _a() Example:
      Func _InfoPC() Local $ObjService = ObjGet('winmgmts:{impersonationLevel = impersonate}!\\' & @ComputerName & '\root\cimv2') Local $ObjMB = $ObjService.ExecQuery('SELECT * FROM Win32_BaseBoard', 'WQL', 0x30) If IsObj($ObjService) Then For $objItemMB In $ObjMB $sInfo &= @TAB & 'Motherboard: ...... ' & $objItemMB.Product & @CRLF I'm beginner in this sphere and need  you all speak easy and simply because i'm Russian.Thanks)
    • By Deshanur
      Am trying to automate injecting credential on the login form for all kind of Web application for IE. I know how to identify the form name by viewing the source code and using the method - _IEFormGetObjByName($ie, $form_Name).
      I would like to know how to identify or get the form object for the web app where there is no form name tag for example below, for the is I have used - _IEFormGetCollection($ie, 0) to get the form object.
      My Question is does it work for all kind of application "_IEFormGetCollection($ie, 0)" how to identify Index value? is it always 0? is there any better solution?
      The final solution am looking for is find out form object, get the username, password field and inject credential and submit the form.
      How to find out index value? for the forms which does not have form name field.
      $login_form = _IEFormGetCollection($ie, 0) $email_field = _IEFormElementGetObjByName($login_form, $form_UserName) $pass_field = _IEFormElementGetObjByName($login_form, $form_password) $login_button = _IEFormElementGetObjByName($login_form, $form_submitbutton) _IEFormElementSetValue($email_field, $CmdLine[2]) _IEFormElementSetValue($pass_field, $CmdLine[3]) ControlSend($hwnd, "", "[CLASS:Internet Explorer_Server; INSTANCE:1]","{Enter}") OR This works fine if the form has form name. $login_form = _IEFormGetObjByName($ie, $form_Name) $email_field = _IEFormElementGetObjByName($login_form, $form_UserName) $pass_field = _IEFormElementGetObjByName($login_form, $form_password) $login_button = _IEFormElementGetObjByName($login_form, $form_submitbutton) _IEFormElementSetValue($email_field, $CmdLine[2]) _IEFormElementSetValue($pass_field, $CmdLine[3]) ControlSend($hwnd, "", "[CLASS:Internet Explorer_Server; INSTANCE:1]","{Enter}")
    • By Page2PagePro
      Excel VBA's IDE registers a Control-y as "cut this line of code".
      For those prone to Undo/Redo (Ctrl+Z/Ctrl+Y) you may find frustration when your code in the editor does not redo, but in fact clears your active line of code while killing redo history.
      Though not perfect, I keep this tool running in background on startup.
      The purpose is to allow Cltr+Y to act normally throughout Windows and Office and only interact *differently* with the "Microsoft Visual Basic for Applications" window that is active.
      If the Standard Menu bar exists, it'll try to click the ReDo (Blue Arrow to the right), else "Alt+e, r" keystrokes (less desired).
      Here's the code:
      Opt('MustDeclareVars', 1) Opt("WinTitleMatchMode", 1) HotKeySet("^y", "TriggerRedo") While 1 Sleep(10) WEnd Func TriggerRedo() ConsoleWrite("TriggerRedo()" & @CRLF) Local $title = "Microsoft Visual Basic for Applications - " Local $hWnd If WinExists($title) And WinActive($title) Then ;~ Parent Window Handle $hWnd = WinGetHandle($title) Local $aWindowPos = WinGetPos($hWnd) ;~ Control Bar Handle, Position and If Visible Local $sControlID = "[CLASS:MsoCommandBar; TEXT:Standard;]" Local $hStandardBar = ControlGetHandle($hWnd, "", $sControlID) Local $bIsVisible = ControlCommand($hWnd, "", $sControlID, "IsVisible") If $hStandardBar And $bIsVisible Then ConsoleWrite("Using Mouse Click." & @CRLF) ;~ Determine Redo button location on visible Control Bar Local $aBarPos = ControlGetPos($hWnd, "", $sControlID) Local $mX = $aWindowPos[0] + $aBarPos[0] + 217 + Int(23/2) Local $mY = $aWindowPos[1] + $aBarPos[1] + 27 + Int(22/2) MouseClick("Left", $mX, $mY, 1, 0) Else ConsoleWrite("Using VBA Send Keys." & @CRLF) $sControlID = "[CLASS:MsoCommandBar; TEXT:Menu Bar;]" Local $hMenuBar = ControlGetHandle($hWnd, "", $sControlID) ControlSend($hWnd, "", $hMenuBar, "!e") ;~ Send("r") $sControlID = "[CLASS:MsoCommandBarPopup; TEXT:Edit;]" Local $hPopupBar = ControlGetHandle($hWnd, "", $sControlID) ControlSend($hWnd, "", $hPopupBar, "r") EndIf Else ConsoleWrite("Using NATIVE Send Keys." & @CRLF) HotKeySet("^y") Send("^y") ;~ may cause "yyy..." when held HotKeySet("^y", "TriggerRedo") EndIf EndFunc ;==>TriggerRedo Hope this inspires someone.
  • Create New...