Avete mai avuto bisogno leggere o modificare le impostazioni degli account di Outlook da .Net o PowerShell?
Per esempio la necessità di cambiare al volo gli indirizzi dei server SMTP di tutti i vostri account su Outlook a causa dei limiti imposti da qualche rete / provider?
Su Codeplex trovate un progettino all'uopo che ho appena pubblicato:
http://www.codeplex.com/PSOutlookManager
Consiste in una piccola
class library che wrappa le
Account Management API (
IOlkAccountManager & co.), alcune
Cmdlets per gestire facilmente gli account da PowerShell e qualche script di esempio.
Cavarsela con qualche riga in VBScript e l'automazione di Outlook sarebbe stato oro, peccato che quest'ultima non offre nulla sul tema.
Fortunatamente ci sono le (scarsamente documentate)
Account Management API (
IOlkAccountManager & co.) da Outlook 2003 in poi, non utilizzabili via vbscript o COM Interop .Net e quindi... niet modifiche degli account da applicazioni managed!
A questo punto un bel mixed mode assembly in C++/CLI è stato d'obbligo per wrappare le funzionalità. Anche qui, data la mancanza di documentazione,
OutlookSpy è stato fondamentale, assieme ad un progettino analogo per MFC su
Codeproject
Per PowerSheel trovate tre Cmdlets di facile utilizzo (si veda la home su
Codeplex per documentazione ed esempi di script):
- Get-MAPIProfile
- Get-MAPIAccount
- Set-MAPIAccount
Se invece volete usare .Net, la piccola class library è di comprensione immediata.
Ecco un esempio in C#:
using AlexPilotti.OutlookAccountManager;
...
// Initialize MAPI
AccountManager.MAPIInitialize();
// Get the available MAPI profiles list
IList<ProfileData> profiles = AccountManager.GetProfiles();
// Get the MAPI accounts in the first profile (e.g. "Outlook")
IList<AccountData> accounts = AccountManager.GetAccounts(profiles[0].ProfileName);
// Do some changes in the account settings
accounts[0].EmailID = "changed.email@acme.com";
accounts[0].OutgoingServer = "new.smtpserver.com";
// Update the account
AccountManager.SaveAccountData(accounts[0]);
// That's it!
AccountManager.MAPIUninitialize();