Funkcje narzędziowe w Aspose.Email dla .NET

Praca z jednolitym systemem wiadomości

Aspose.Email może pobierać informacje o jednolitym systemie wiadomości z Exchange Server 2010. Obecnie obsługiwane jest jednolite wiadomościowanie, takie jak uzyskiwanie informacji konfiguracyjnych, inicjowanie połączenia wychodzącego, pobieranie informacji o połączeniach telefonicznych po ID połączenia oraz rozłączanie połączenia po ID. Poniższy przykład kodu pokazuje, jak pobrać informacje konfiguracyjne jednolitego systemu wiadomości z Microsoft Exchange Server 2010.

IEWSClient client = EWSClient.GetEWSClient(mailboxUri, credential);
UnifiedMessagingConfiguration umConf = client.GetUMConfiguration();

Uzyskiwanie wskazówek pocztowych

Microsoft Exchange Server dodał kilka nowych funkcji w wersjach Exchange Server 2010 i 2013. Jedna z nich umożliwia użytkownikom otrzymywanie wskazówek pocztowych podczas tworzenia wiadomości e‑mail. Wskazówki te są bardzo przydatne, ponieważ dostarczają informacji przed wysłaniem wiadomości. Na przykład, jeśli adres e‑mail w liście odbiorców jest nieprawidłowy, wyświetlana jest wskazówka informująca, że adres jest nieważny. Wskazówki pocztowe pozwalają także zobaczyć odpowiedzi „Poza biurem” przed wysłaniem wiadomości: Exchange Server (2010 i 2013) wysyła wskazówkę podczas komponowania wiadomości, jeśli któryś z odbiorców ustawił odpowiedź poza biurem. Wymagany jest Microsoft Exchange Server 2010 Service Pack 1 dla wszystkich funkcji przedstawionych w tym artykule. Poniższy fragment kodu pokazuje, jak używać EWSClient klasa używająca Exchange Web Services, dostępna w Microsoft Exchange Server 2007 i nowszych wersjach.

// 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);
    }
}

Impersonacja Exchange

Impersonacja w Exchange pozwala komuś na podszywanie się pod inne konto i wykonywanie zadań oraz operacji przy użyciu uprawnień zasymulowanego konta zamiast własnych. Gdy delegowanie pozwala użytkownikom działać w imieniu innych, impersonacja pozwala im działać jako inni użytkownicy. Aspose.Email obsługuje impersonację w Exchange. EWSClient klasa udostępnia ImpersonateUser i ResetImpersonation metod, aby ułatwić tę funkcję.

Aby wykonać to zadanie:

  1. Zainicjuj ExchangeWebServiceClient dla użytkownika 1.
  2. Zainicjuj ExchangeWebServiceClient dla użytkownika 2.
  3. Dodaj testowe wiadomości do kont.
  4. Włącz impersonację.
  5. Resetuj impersonację.

Poniższy fragment kodu pokazuje, jak używać EWSClient klasa implementująca funkcję Impersonacji.

// 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 { }
    }
}

Funkcja Auto Discover przy użyciu EWS

Aspose.Email API pozwala odkrywać ustawienia serwera Exchange przy użyciu klienta 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);

Anulowanie przywracania PST na serwer Exchange

Aspose.Email API umożliwia przywrócenie pliku PST na serwer Exchange. Jednak jeśli operacja trwa długo z powodu dużego rozmiaru pliku PST, może być konieczne określenie kryteriów przerwania operacji. Można to osiągnąć przy użyciu API, jak pokazano w poniższym przykładzie kodu.

Uwaga: Przykład wymaga również dodania następującej klasy.


 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}");
    }