Funzionalità utilitarie in Aspose.Email per .NET
Lavorare con la messaggistica unificata
Aspose.Email può recuperare informazioni di messaggistica unificata da Exchange Server 2010. La messaggistica unificata, come il recupero delle informazioni di configurazione, l’avvio di una chiamata in uscita, il recupero delle informazioni di chiamata telefonica per ID chiamata e la disconnessione di una chiamata per ID, è attualmente supportata. Il seguente esempio di codice mostra come recuperare le informazioni di configurazione della messaggistica unificata da Microsoft Exchange Server 2010.
IEWSClient client = EWSClient.GetEWSClient(mailboxUri, credential);
UnifiedMessagingConfiguration umConf = client.GetUMConfiguration();
Ottenere suggerimenti di posta
Microsoft Exchange Server ha aggiunto diverse nuove funzionalità con Exchange Server 2010 e 2013. Una di queste consente agli utenti di ottenere suggerimenti di posta durante la composizione di un messaggio email. Questi suggerimenti sono molto utili poiché forniscono informazioni prima che l’email venga inviata. Ad esempio, se un indirizzo email è errato nell’elenco dei destinatari, viene mostrato un suggerimento per informarti che l’indirizzo email non è valido. I suggerimenti di posta consentono anche di vedere le risposte fuori sede prima di inviare un’email: Exchange Server (2010 & 2013) invia il suggerimento di posta mentre l’email viene composta se uno o più destinatari hanno impostato risposte fuori sede. È necessario Microsoft Exchange Server 2010 Service Pack 1 per tutte le funzionalità illustrate in questo articolo. Il seguente frammento di codice mostra come utilizzare il EWSClient classe che utilizza Exchange Web Services, disponibile in Microsoft Exchange Server 2007 e versioni successive.
// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.GetEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
Console.WriteLine("Connected to Exchange server...");
// Provide mail tips options
MailAddressCollection addrColl = new MailAddressCollection();
addrColl.Add(new MailAddress("test.exchange@ex2010.local", true));
addrColl.Add(new MailAddress("invalid.recipient@ex2010.local", true));
GetMailTipsOptions options = new GetMailTipsOptions("administrator@ex2010.local", addrColl, MailTipsType.All);
// Get Mail Tips
MailTips[] tips = client.GetMailTips(options);
// Display information about each Mail Tip
foreach (MailTips tip in tips)
{
// Display Out of office message, if present
if (tip.OutOfOffice != null)
{
Console.WriteLine("Out of office: " + tip.OutOfOffice.ReplyBody.Message);
}
// Display the invalid email address in recipient, if present
if (tip.InvalidRecipient == true)
{
Console.WriteLine("The recipient address is invalid: " + tip.RecipientAddress);
}
}
Impersonificazione di Exchange
L’impersonificazione di Exchange consente a qualcuno di impersonare un altro account ed eseguire attività e operazioni usando i permessi dell’account impersonato invece dei propri. Mentre la delega permette agli utenti di agire per conto di altri utenti, l’impersonificazione consente loro di agire come altri utenti. Aspose.Email supporta l’impersonificazione di Exchange. Il EWSClient classe fornisce il ImpersonateUser e ResetImpersonation metodi per facilitare questa funzionalità.
Per eseguire questa operazione:
- Inizializza ExchangeWebServiceClient per l’utente 1.
- Inizializza ExchangeWebServiceClient per l’utente 2.
- Aggiungi messaggi di test agli account.
- Abilita impersonificazione.
- Reimposta impersonificazione.
Il seguente frammento di codice mostra come utilizzare il EWSClient classe per implementare la funzionalità di impersonificazione.
// Create instance's of EWSClient class by giving credentials
IEWSClient client1 = EWSClient.GetEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser1", "pwd", "domain");
IEWSClient client2 = EWSClient.GetEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser2", "pwd", "domain");
{
string folder = "Drafts";
try
{
foreach (ExchangeMessageInfo messageInfo in client1.ListMessages(folder))
client1.DeleteItem(messageInfo.UniqueUri, DeletionOptions.DeletePermanently);
string subj1 = string.Format("NETWORKNET_33354 {0} {1}", "User", "User1");
client1.AppendMessage(folder, new MailMessage("User1@exchange.conholdate.local", "To@aspsoe.com", subj1, ""));
foreach (ExchangeMessageInfo messageInfo in client2.ListMessages(folder))
client2.DeleteItem(messageInfo.UniqueUri, DeletionOptions.DeletePermanently);
string subj2 = string.Format("NETWORKNET_33354 {0} {1}", "User", "User2");
client2.AppendMessage(folder, new MailMessage("User2@exchange.conholdate.local", "To@aspose.com", subj2, ""));
ExchangeMessageInfoCollection messInfoColl = client1.ListMessages(folder);
//Assert.AreEqual(1, messInfoColl.Count);
//Assert.AreEqual(subj1, messInfoColl[0].Subject);
client1.ImpersonateUser(ItemChoice.PrimarySmtpAddress, "User2@exchange.conholdate.local");
ExchangeMessageInfoCollection messInfoColl1 = client1.ListMessages(folder);
//Assert.AreEqual(1, messInfoColl1.Count);
//Assert.AreEqual(subj2, messInfoColl1[0].Subject);
client1.ResetImpersonation();
ExchangeMessageInfoCollection messInfoColl2 = client1.ListMessages(folder);
//Assert.AreEqual(1, messInfoColl2.Count);
//Assert.AreEqual(subj1, messInfoColl2[0].Subject);
}
finally
{
try
{
foreach (ExchangeMessageInfo messageInfo in client1.ListMessages(folder))
client1.DeleteItem(messageInfo.UniqueUri, DeletionOptions.DeletePermanently);
foreach (ExchangeMessageInfo messageInfo in client2.ListMessages(folder))
client2.DeleteItem(messageInfo.UniqueUri, DeletionOptions.DeletePermanently);
}
catch { }
}
}
Funzionalità Auto Discover tramite EWS
L’API Aspose.Email consente di scoprire le impostazioni del server Exchange utilizzando il client EWS.
string email = "asposeemail.test3@aspose.com";
string password = "Aspose@2017";
AutodiscoverService svc = new AutodiscoverService();
svc.Credentials = new NetworkCredential(email, password);
IDictionary<UserSettingName, object> userSettings = svc.GetUserSettings(email, UserSettingName.ExternalEwsUrl).Settings;
string ewsUrl = (string)userSettings[UserSettingName.ExternalEwsUrl];
Console.WriteLine("Auto discovered EWS Url: " + ewsUrl);
Annulla operazione di ripristino PST su Exchange Server
L’API Aspose.Email consente di ripristinare un file PST su Exchange Server. Tuttavia, se l’operazione richiede molto tempo a causa delle grandi dimensioni del file PST, potrebbe essere necessario specificare un criterio per annullare l’operazione. Questo può essere realizzato usando l’API come mostrato nel codice di esempio seguente.
Nota: L’esempio richiede anche l’aggiunta della seguente classe.
public class CustomAbortRestoreException : Exception { }
using (IEWSClient client = EWSClient.GetEWSClient("https://exchange.office365.com/ews/exchange.asmx", "username", "password"))
{
DateTime startTime = DateTime.Now;
TimeSpan maxRestoreTime = TimeSpan.FromSeconds(15);
int processedItems = 0;
BeforeItemCallback callback = delegate
{
if (DateTime.Now >= startTime.Add(maxRestoreTime))
{
throw new CustomAbortRestoreException();
}
processedItems++;
};
try
{
//create a test pst and add some test messages to it
var pst = PersonalStorage.Create(new MemoryStream(), FileFormatVersion.Unicode);
var folder = pst.RootFolder.AddSubFolder("My test folder");
for (int i = 0; i < 20; i++)
{
var message = new MapiMessage("from@gmail.com", "to@gmail.com", "subj", new string('a', 10000));
folder.AddMessage(message);
}
//now restore the PST with callback
client.Restore(pst, new Aspose.Email.Clients.Exchange.WebService.RestoreSettings
{
BeforeItemCallback = callback
});
Console.WriteLine("Success!");
}
catch (CustomAbortRestoreException)
{
Console.WriteLine($"Timeout! {processedItems}");
}