Jump to content
Chris866

Managing Outlook accounts in profile

Recommended Posts

Chris866

I'm trying to script a way to add and remove accounts to a users Outlook profile.  I _think_ adding can be done by creating PRF files but how can you delete an account without Exchange?

 

We already have in place a web interface where we can say what users should be reading what email accounts, the output of the webpage writes a txt config file.  Currently we use Thunderbird but users are wanting Outlook (for some reason, we don't run Exchange).  In Thunderbird, when it starts, via an autoit script, it checks the webpage config file, looks to see what email accounts the user should be reading, each account has an ID we set in the web php, the script them looks in the users pref.js file for the ID's they should be ready and those that they shouldn't be reading anymore.  The users pref.js is then edited, the lines with the ID they don't need to read are removed, for accounts that need adding, a template segment of pref.js file is copied locally, the ID number is inserted and the file is cat'ed to the users prefs.js.  Thunderbird is then started and displays the email accounts that user should be reading, job done.  This is what I'm trying to reproduce but with Outlook. 

 

Thoughts....

 

thanks.  Chris

Share this post


Link to post
Share on other sites
water

Details about profiles can be found here or here.
Happy reading :)


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-10-19 - Version 1.4.10.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-09-01 - Version 1.3.4.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
 
Tutorials:

ADO - Wiki

 

Share this post


Link to post
Share on other sites
Chris866

Thanks for the links.  I don't seem to find anything about how to remove a profile so is this possible?  :'(

Share this post


Link to post
Share on other sites
water

Unfortunately I have absolutely no idea and didn't find anything related on the web. Best bet seems to be to create a new profile and drop the unneeded account.


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-10-19 - Version 1.4.10.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-09-01 - Version 1.3.4.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
 
Tutorials:

ADO - Wiki

 

Share this post


Link to post
Share on other sites
Chris866

OK, for anyone finding this page who is also looking how to add and remove Outlook accounts without using exchange, here's how you can do it.

 

All of the information is in the registry, it's just a matter of knowing where and what to delete.  To add an account, construct a .prf file and start Outlook with the /importprf option.  In my case I used Autoit to read the txt based config file that was generated from a web page.  The config lines looked like:
 

Quote

90009,cadmin,C Group Secretary,ca@xxxx.cam.ac.uk,CA ,cm214

90010,hrpeople,HR Office,hr@xxxx.cam.ac.uk,HR,cm214

....

 

I created a PRF template file like the one attached - template.txt.  It's the same format as the PRF file that is exported when you run Office setup.exe with the /admin switch.  For the areas in the template that will change for each Outlook account I want to add, I add a string of text that I use _ReplaceStringInFile to replace that string with some proper lines that Outlook will understand when it imports the PRF file.  It seems that you can't start Outlook with more than one /importprf [filename] therefore you need to create on PRF file with all the Outlook accounts and any LDAP settings.  To test the PRF file you need to delete any existing Outlook profiles, this is where the learning starts.  I'm working with Outlook 2010, the registry keys may be different with different versions of Outlook but for 2010, delete the key:

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\cm214

 

(cm214 is my Outlook profile name)

Also delete any files in:

C:\Users\cm214\Appdata\Local\Microsoft\Outlook\

 

Now Outlook can be started and configured:

"c:\Program Files (x86)\Microsoft Office\Office14\OUTLOOK.EXE" /importprf [path to the edited template file with replaced text]

 

That's the easy bit and well documented on the web.  What doesn't seem to be so well documented is how to remove one or more of your Outlook accounts.  Yes, you can just delete the profile under \Windows Messaging Subsystem\Profiles\ in the registry and remove the .pst files but you then loose all of your Outlook accounts.  The following is what I do and seems to work!

 

For each account you want to delete you need to delete 4 registry keys and change two values in another key.  All the accounts are listed in the registry:

 

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\cm214\9375CFF0413111d3B88A00104B2A6676\

 

9375CFF0413111d3B88A00104B2A6676 seems to always be used for Outlook 2010 anyway.  The keys below this look like:

 

00000001

00000002

00000005

00000008

For this text we'll call them 'accountids'.  These accountids are quite meaningless until you look at the key called 'Account Name' within each of the 'accountids' keys.  The value of 'Account Name' is in hex and using the following will show you which account 0000001, 00000002 etc refer to in English:

$outlook_registry_pro_root="HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles"
$func_username="cm214"
$outlook_registry_pro_key="9375CFF0413111d3B88A00104B2A6676"


For $i = 1 To 100
  $sSubKey = RegEnumKey($outlook_registry_pro_root & "\" & $func_username & "\" & $outlook_registry_pro_key, $i)
  If @error Then ExitLoop
  If $sSubKey <> "" Then
    $prof_regread = RegRead($outlook_registry_pro_root & "\" & $func_username & "\" & $outlook_registry_pro_key & "\" & $sSubKey, "Account Name")
    $prof_regread = StringReplace($prof_regread, "00", "")
    $prof_reg_key = BinaryToString($prof_regread)
    ConsoleWrite ($prof_reg_key & " (" & "\" & $func_username & "\" & $outlook_registry_pro_key & "\" & $sSubKey & ")" & @CRLF)
  EndIf
Next

So, for the account (accountids) you want to delete, look in each 9375CFF0413111d3B88A00104B2A6676\(accountids)\ and look for the value of 'Preferences UID'  This is the name of the another key below 'HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\cm214\ ', delete this key.

 

Next, look at the value of 'Service UID' within 9375CFF0413111d3B88A00104B2A6676\(accountids)\.  This too points to another key under 'HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\cm214\' but before deleting it, look in this key and note the value of '01023d00'.  This points to another key under '\Windows Messaging Subsystem\Profiles\cm214\', delete this key and then delete the key you read the value of '01023d00' in.  That's three registry keys deleted, the last registry key to delete is 9375CFF0413111d3B88A00104B2A6676\(accountids)\.  Do this for each account you want to delete.

 

We then need to change the value of the key 9375CFF0413111d3B88A00104B2A6676\{ED475418-B0D6-11D2-8C3B-00104B2A6676} and 9375CFF0413111d3B88A00104B2A6676\{ED475420-B0D6-11D2-8C3B-00104B2A6676}.  These are binary values and they contain the values of the 'accountids', 0000001, 00000002 etc.  For each account you delete you also need to delete the value of 'accountids' from the two keys but each value of 'accountids' has to be split into four groups of two values and each of the four groups reversed and put back to one group of eight.  00000001 > 00 00 00 01(split into four groups) > 01000000 (joined together starting with the last pair).  To make it clearer, lets say the value of 'accountids' = 12345678.  Make four groups of two = 12 34 56 78.  Then make one group starting with the last of the pairs = 78563412.  For each account we delete remove this accounts 'accountids' from both {ED475418-B0D6-11D2-8C3B-00104B2A6676} and {ED475420-B0D6-11D2-8C3B-00104B2A6676}.  That completes the registry work.

 

The last thing to do is to remove any files within C:\Users\[username]\Appdata\Local\Microsoft\Outlook.  To work out what files to delete, look for anything with the value of 'Account Name' that we worked out earlier when we found what 'accountids' to delete.  Done, you've now removed an account without blatting all your accounts.

 

For my users they start what they think is the Outlook exe but it's been replaced with my Autoit code that works out what accounts they should be reading as set in the web generated config txt file.  It then works out the accounts that are in the registry.  For any accounts that need adding a new PRF file is created.  Any account they shouldn't be read are removed from the registry.  Lastly Outlook is started with the /importprt [filename] argument.  My new exe can also be passed two variables, 'clean' or 'list'.  Clean will delete the registry below HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\cm214\ and remove files in \Appdata\Local\Microsoft\Outlook\.  List will show the readable version of the accounts under \CurrentVersion\Windows Messaging Subsystem\Profiles\cm214\9375CFF0413111d3B88A00104B2A6676\.

 

Hopefully this will help someone who's trying to work out how to remove / delete Outlook accounts.

template.txt

Share this post


Link to post
Share on other sites
water

Thanks for sharing :)


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-10-19 - Version 1.4.10.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-09-01 - Version 1.3.4.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
 
Tutorials:

ADO - Wiki

 

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

  • Similar Content

    • water
      By water
      Extensive library to control and manipulate Microsoft Outlook.
      Theads: Development - General Help & Support - Example Scripts - Wiki
      BTW: If you like this UDF please click the "I like this" button. This tells me where to next put my development effort

      KNOWN BUGS (last changed: 2018-09-01)
      None
    • Gowrisankar
      By Gowrisankar
      Dear members of the forum,
      I need to open the attachments from mails without downloading them. Is it possible using OutlookEx UDF ?
    • Gowrisankar
      By Gowrisankar
      Dear members,
      I'm trying to get the attachments from mails using OutlookEx UDF and then save them in a particular location.
      The UDF considers even the signature images and other images in the mail body as attachments, and saves it in the folder I point. I want only the proper attachment documents to be saved.
      Requesting the guidance of the forum members.
       
       
      Thanks and regards,
      Gowrisankar R.
    • Gowrisankar
      By Gowrisankar
      Dear members,
      I'm trying to move unread mails from Inbox to a different folder using OutlookEx UDF.
      But its not working for me. I'm not sure what mistake I do.
      I get the error code 6 when the following is executed. From the UDF it is observed that  "No or an invalid item has been specified".
      Note : The UDF version is 1.3.3.1. AutoIt version (v3.3.14.2).
      #include <OutlookEX.au3> Global $oOutlook = _OL_Open() If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF", "Error creating a connection to Outlook. @error = " & @error & ", @extended = " & @extended) Global $aOL_Item = _OL_ItemFind($oOutlook, "*\Inbox", $olMail, "[UnRead]=True", "", "", "Subject", "", 1) If $aOL_Item[0][0] = 0 Then Exit MsgBox(16, "OutlookEX UDF: _OL_ItemMove Example Script", "Could not find a task item in folder 'Outlook-UDF-Test\SourceFolder\Tasks'. @error = " & @error) _ArrayDisplay($aOL_Item, "OutlookEX UDF: _OL_ItemFind Example Script - Unread mails") _OL_ItemMove($oOutlook, $aOL_Item[1][0], Default, "*\Outlook-UDF-Test\TargetFolder\Mail") If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF: _OL_ItemMove Example Script", "Error moving specified task. @error = " & @error) Any help is deeply appreciated. Thanks in advance.
      Thanks and regards,
      Gowrisankar R.
    • cag8f
      By cag8f
      Hi all.  Does AutoIt have any functions/tools (either built-in or user defined) that can help me automate the process of exporting an OST mailbox to a PST file in Microsoft Outlook (2013)?
      I know how to carry out the process manually.  At the Microsoft Forums, I have asked if it is possible to do the same via a script, but some have said it is not possible.  It may be possible if I was using Microsoft Exchange, but I am not.
      I've seen some posts about an Outlook UDF on this site (here and here), but I don't see any mention of exporting a mailbox.  
      In my post at the Microsoft Forums, many paid third party applications were suggested.  But for now I would like to pursue the custom scripting route as far as I can.
      The ultimate goal of this exercise is to automatically create a weekly backup of my Outlook mailbox for offline storage.
      Thanks in advance.
       
×