Is Outlook.Application component still supported in Outlook 2016? - outlook

I have some code that sends emails using the default email client on windows.
If it's Outlook, I'll use the "Outlook.Application" ole object, otherwise I'll fall back to MAPI.
This has been in use at multiple sites for several years, but now it is not working for a new client.
/* Pseudocode Delphi */
client = HKEY_CURRENT_USER\Software\Clients\Mail
if client='' then client=HKEY_LOCAL_MACHINE\Software\Clients\Mail
if pos('Outlook',client)>0 then useoutlook:=true;
if useoutlook then OutApp:=CreateOleObject('Outlook.Application');
else UseMapi
There are two problems with this approach using Win 10 and Outlook 2016 MSO (16.0.11901.20070) 32 bit
The return from the registry read is PackagedMail ... I don't know what this is and can't find anything about it.
Outlook.Application is not included in the registered classes
MAPI returns a MAPI 000001 incorrect function error
I've found some clues online indicating that MAPI in outlook relies on the Outlook.Application OLE.
I just need to either know how for force it to install the OLE class, OR register it properly for MAPI, OR to know if it's no longer supported and I need to find a different solution.
All I'm trying to do is to send an email with a pdf attachment. I found that Outlook's MAPI support seemed a little flakey and I was better off using the OLE, but if it's no longer supported or needs extra steps, I need to know.
If anyone has any detail on PackagedMail, that would be a bonus.

Partial answer which resolved my immediate problem:
The Delphi Winapi.Mapi unit checks the registry to see if MAPI is installed:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Messaging Subsystem
MAPI="1"
This was clearly visible and populated in Regedit, but not visible to Delphi due to Registry Redirection
The actual registry key that 3 2bit applications see is stored here:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows Messaging Subsystem
which was NOT populated for some reason. Manually adding MAPI="1" into the WOW6432Node entry made the MAPI features start working again.
This still doesn't answer my actual question, but I thought it worth documenting.
NOTE: The MAPI value is a REGSZ (String) type.

Related

Disable/Remove Outlook Web Addin for Windows

Well, that's a very important thing, or at least, I think it is, so, please read it carefully.
Introduction
My background is the COM/VSTO land and due to new requirements, I'm slightly merging to office.js.
First, I was very pleased by the concept that unlike Word, Excel & PPT ofiice.js add-ins, Outlook Web Add-ins install directly on the user's exchange inbox, which means: install once, run everywhere. This worked for me very well at the beginning but it quickly turns out, in some situations, to be terrible, or at least in two of my cases.
We have to agree that Outlook Web Addins (and office.js addins in general) are not mature enough to completely replace COM/VSTO/VBA addins. The ONLY clear benefit is the multi-platform support. So, as I already have clients who use COM Outlook addins, which works more than perfect for their needs, they just needed a way to have the same addin on Mac, Web and Mobile, and I spend some time learning how to build addins using office.js and did deliver some good results but after they started using the new addin, some unexpected drawbacks flopped to the surface which made me think twice!
Now, on Windows, we have both addins running for Outlook the COM & Office.js one but as far as I can tell, there is no comparison between the two, the COM addin is far more superior than the equivalent Web Addin. If I have to state ONLY one benefit of COM over office.js in Outlook, I'd say that office.js lacks the support of inboxes that not use Exchange server as a backend, so Gmail, Yahoo and 3rd-party email providers are not supported which is too frustrating and we should keep the COM addin there.
Problem: Below I'll provide two use cases where the Outlook Web Addin is very [un-welcome] with the presence of a COM addin.
Scenario #1
In one addin, we intercept and parse the email before it is sent to see if it will allow Outlook to send it or not. This works perfectly with both, for COM addin we use ApplicationEvents_11_ItemSendEventHandler event and for Web Addin, we use the horribly implemented <Event Type="ItemSend" FunctionExecution="synchronous" FunctionName="checkEmail" />, the terrible weakness in this implementation is, unlike in the COM add-in, you cannot give the user the option to turn ON/OFF this option and they will always have to see the annoying msg, "[You Add-in] is working on your request"
and, in addition to your inability to customize the msg's text shown, you cannot hide it or disable it which results in a bad UX.
To make things even worst, I was expecting that if both addins are there and waiting for the Send Event to intercept, I assumed it's the COM add-in which should receive the event first then when processing it, it will set its Cancel variable to true, this way the Web Add-in won't be aware of the event at all, but, surprisingly, the exact opposite happens, the Web Add-in received the event first, process it and cancel it: event.completed({ allowEvent: true });, while the COM addin was having good dreams.
Scenario #2: Having an addin that acts as a Spellchecker.
While we have full control over the Word editor for [Windows] Outlook, the COM addin provides excellent results, which is not the case in Web Addin where you stick with a custom task pane and provide a minimal user experience that does the very basic things, so, we find ourselves having the two spellcheckers in Outlook one is excellent and the other one is ugly and its presence ONLY makes sense when it runs in Outlook for Mac. For Outlook.com, a chrome extension would be the ideal solution and for mobile, Compose Mode is not supported yet!!
The Question
Having said all the above, hope you didn't skip it, Is there a way to disable a Web Addin for Outlook in Windows and, possibly, Online? In other words, can we SELECT the platforms that are supported by an Outlook Web Addin? or let's say it again, like: can we SELECT the platforms that an Outlook Web Addin existence makes sense?
First of all I want to thank you so much for taking the time to share the detailed feedback. I agree for your specific type of Add-in there might be challenges to provide a better experience, more on this later.
Second, to answer your specific question, no, we dont support a way to disable Add-ins on specific platforms or select the platforms your Web Add-in will be targeting, in Outlook.
That been said, I think you are requesting many features on this post, the right place for this is our uservoice channel.
considerations:
We have a feature than enables COM/Web Add-ins compatibility in
Win32, basically disables the Web Add-in if you have a
still-betterCOM Add-in. You can find the details here.
However, this feature is not yet supported in Outlook (just in
Excel, Word and PPT) but its something we are planning to add. Let
me know if you find this useful, it will solve the issue of
conflicting item sends events you mentioned.
We dont have APIs to
provide rich interaction of the mail content, for a spell checker I
appreciate if you can share that in uservoice.
Hope this helps.

How to suppress Outlook's security warning in win7-32 and Outlook 2003 that uses VB6 and CDO 1.2.1

We have VB6 code that works in Win XP and Outlook 2003 using CDO 1.2.1. Now that we moved to Win7 32-bit, we have the Outlook security warning (not UAC) that an application is trying to access a particular outlook feature. I have searched for hours without success. I am looking for specific guidance rather than corrections per se to my code. If you have particular code to display the address book in said environment, that would be great! BTW, building a homegrown list of addresses rather than calling the address book (thus requiring CDO) was rejected and hence not an option. Thank you!
You can use Outlook Redemption to accomplish what you desire without the security warnings.
http://www.dimastr.com/redemption/home.htm

Does Windows, Outlook, or Exchange have an API for reading iCal format?

I'm trying to add iCal import support to my existing scheduling application which needs to support Windows XP, Vista, and 7. Writing iCal format is easy, but reading it is another story, mostly trying to convert times to local times with the complex TIMEZONE/TZID/RRULE syntax. Ideally Windows would have a native API for this, but I haven't found one.
I know Outlook 2007+ has an OpenSharedItem function that would work. I don't want to require users to have Outlook installed though, since my application "competes" with Outlook. I thought about writing a web service that would use Outlook on my web server to do this, but I know using Outlook OLE/COM objects from a service has issues, so that probably isn't an option either. I do own about 300 Exchange Server licenses, are there any APIs with Exchange that would maybe work better? I do notice when I email iCal files from GoToMeeting.com they say they were created with "Microsoft CDO for Microsoft Exchange", so I have a feeling they are doing something like this to avoid writing the format themselves.
My application is written in C++ using mostly native Win32 API, but I don't mind creating a .NET DLL for this, or even requiring users to have Internet access so I can post the file to my web server and have it return a converted format my app can use easily. My web server runs on Windows though, so anything Unix-based might be dificult. Other than that, I'm pretty open to options.
Update: I did find CDOEX but as I've never used it before, can anyone tell me where to start and if it can in fact do what I need? I don't really see much about iCal in the docs, and I'd need to install Exchange on my dev PC (not crazy about that) to start playing around with this API.
You can try to use Redemption (I am its author) - it allows to explicitly import iCal files using RDOAppointmentItem.Import(..., olICal).

How to write a custom sync provider for Outlook Contacts?

Can anyone point me to an example of an Outlook Contact custom sync provider for the Microsoft Sync Framework? I would like to use that Framework to build a bidirectional sync between my CRM and Outlook. I've found a reference to this SO question: Sync Microsoft Outlook with my own data
Unfortunately, the link to MSDN example is no longer valid. It simply redirects to the MSDN sample gallery which has no such sample.
Any help would be much appreciated.
I am very curious to what the link was to, as well. I have not found anything short of either a "Wrapped PST Store" or "Custom MAPI Store" or "Custom MAPI Transport Provider". MAPI itself provides a synchronization process, but it is not designed to be used from managed code and is very complicated.
The best "roundup" I have found is the Outlook MAPI Samples on codeplex. These do not deal with any pretty "Sync Framework" though; presumably that is used as the back-end? (Most samples neglect how to get to the back-end processing.)
We are evaluating an entirely managed in-Addin synchronization process here to avoid having to deal with the complications of MAPI, but the viability is still not entirely known. (This approach also introduces different problems and limitations.)
Good luck and happy coding.

What DLL do I reference (and where can I get them) to access the Exchange 2003 CDO API in Visual Studio 2008

I am trying to create an application that will manipulate mail messages on Exchange 2003. My development environment is Windows XP with Visual Studio 2008. After reading the description of the various APIs, it seems like CDO is what I should use.
I've downloaded the Exchange 2003 SDK. The documentation has a lot of example programs, but I can't get any of them to compile. I know I need to add references to the correct .DLL(s). The reference documentation talks about CDOEX.DLL. I've gotten the DLL from an Exchange 2003 and referenced it in my project. (Following this link.) It does add a number of objects under the CDO namespace, but many of the ones referenced in the documentation are not present. (For example a couple samples use CDO.Person, which is (as far as I can tell) does not exist.
What I find particularly confusing is that the sample projects use CDO.Person, yet the class reference documentation in the SDK does not list that class as one of the classes belonging to the CDO namespace.
Can anyone please point me to what I need to reference or link to my project to access this and other related classes in the Exchange 2003 SDK?
Additionally, am I missing a portion of the big picture? Is CDO not the way to go? My application will have to access and change are number of messages in hundreds, if not thousands, of different user mailboxes in the Exchange server.
I think I have found the answer. The file needs to be registered with RegSvr32 first. I did not expect this behavior. If you do not run RegSvr32 then only a subset of the classes shows up in the project when the DLL is referenced. But, if you run RegSvr32 cdoex.dll on the file first and then reference it, then all of the classes show up.
I have not confirmed correct behavior when it runs (that will have to wait until I have access to an Exchange 2003 server for testing), but it does look like it compiles correctly.

Resources