Outlook’s slow add-ins resiliency logic and how to always enable slow add-ins

Overview This post explains how to deploy registry settings that would force Outlook to always load a specific add-in. The information in this post only applies to slow (VSTO) add-ins. If Outlook disables your add-in to prevent a crash, this blog post isn’t for you. Requirements Outlook 2013 or 2016. Information Outlook 2013 and 2016’s…

5

MAPI Utility to add Ldap Address Books to existing Outlook profiles

Current version: 1.0.0.4   I’ve had quite a few requests recently for a tool that can configure Ldap (Internet) Address Books in existing Outlook profiles. Since I don’t know of any tool to do this except for the good ole PRF import, I’ve decided to write some code for posterity. Unlike the PRF import, this…

12

MapiHTTP and Autodiscover – How to open shared mailboxes in a MAPI application

Opening shared mailboxes in a MAPI application has been an easy thing in the past. Simply query the primary mailbox for the IID_IExchangeManageStore interface and create an EntryID for the shared mailbox by calling CreateStoreEntryID. This is a V2 Exchange Store Entry ID, as outlined here: https://msdn.microsoft.com/en-us/library/ee203516(EXCHG.80).aspx https://blogs.msdn.microsoft.com/stephen_griffin/2011/07/21/store-entry-id-v2/ Here’s a simple code snippet on how…


Sample Outlook add-in showing Outlook events

Outlook has a fairly comprehensive event system.  In fact, there are so many events that sometimes it may not be obvious what events will fire when. Attached here you will find a sample add-in that can show you many of the events generated by an Inspector, Explorer, and a Folder.  When monitoring a folder, you…


PowerShell: Split and search large text files

While this isn’t strictly Messaging Development, the attached PowerShell script can be very useful when having to deal with very large text files.  I’ve used it against files of nearly 1Gb in size (which no text editor wants to open, for understandable reasons).  It incorporates a simple text search too, so it is easy to…


Script to run MAPI executable at logon via GPO

  The script below allows you to run a MAPI executable at logon via GPO. It detects the office version and bitness and it runs the exe version matching the bitness of Outlook. The syntax to use is the following: RunExe.vbs ROOT_FOLDER  EXE_NAME  PARAMETERS  RUN_OPTION_RERUN For example, presuming I’ve stored the 32 bit version of…

0

Programmatically manage OWA 2013 folder conversation view settings

As a few people have requested this, I’ve written a .Net sample for managing folder Conversation View settings for OWA 2013. In Exchange 2013, the Conversation View settings are stored the FolderViewState element of the OWA.ViewStateConfiguration configuration item stored in the associated content of the Root folder. This sample can be used to list or…

1

PowerShell/EWS: Searching for and deleting duplicate mailbox folders

We’ve had some cases recently where an issue with migration has caused the migrated mailbox to contain duplicate folders (e.g. there may be two Calendar folders).  I have written a script that can process mailboxes and automatically remove duplicate folders.  In the case of special folders (Inbox, Sent Items, etc.) the correct folder will be…


EWS: How to send signed email using the EWS Managed API

A question that keeps popping up is how to send signed or encrypted email using EWS.  A colleague (thank-you Vladimir!) has recently put together some sample code showing how to do exactly that using the EWS Managed API.  Based on his sample code, I’ve been able to partially complete my Windows Forms application that shows how…


You cannot create multiple System.Management.Automation runspaces in a web application for two or more different users if you use implicit credentials

Update: This information has been published as a KB article: https://support.microsoft.com/en-gb/kb/3115600. When you try and allow multiple users to create System.Management.Automation runspaces in a web application, if you are using implicit credentials (i.e., credentials from impersonation), you will notice that only the first user that accesses the web application is able to call CreateRunspace.  All…

0