Užitečné funkce v Aspose.Email pro .NET

Práce s jednotným zpracováním zpráv

Aspose.Email může získat informace o jednotném zpracování zpráv ze serveru Exchange 2010. Jednotné zpracování zahrnuje získání konfiguračních informací, zahájení odchozího hovoru, získání informací o hovoru podle ID a ukončení hovoru podle ID, a to je v současnosti podporováno. Následující ukázka kódu ukazuje, jak získat konfigurační informace o jednotném zpracování ze serveru Microsoft Exchange 2010.

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

Získávání tipů na e‑mail

Microsoft Exchange Server přidal několik nových funkcí ve verzích Exchange Server 2010 a 2013. Jedna z nich umožňuje uživatelům získat tipy k e‑mailům při psaní zprávy. Tyto tipy jsou velmi užitečné, protože poskytují informace ještě před odesláním e‑mailu. Například pokud je v seznamu příjemců špatně zadaná e‑mailová adresa, zobrazí se tip, který vás upozorní, že adresa je neplatná. Tipy také umožňují zobrazit odpovědi „mimo kancelář“ před odesláním e‑mailu: Exchange Server (2010 & 2013) odešle tip při psaní zprávy, pokud jeden nebo více příjemců nastavil odpověď mimo kancelář. Pro všechny funkce předvedené v tomto článku je vyžadován Service Pack 1 pro Microsoft Exchange Server 2010. Následující úryvek kódu ukazuje, jak použít EWSClient třída používající Exchange Web Services, dostupná v Microsoft Exchange Server 2007 a novějších verzích.

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

Impersonace v Exchange

Impersonace Exchange umožňuje někomu se vydávat za jiný účet a provádět úkoly a operace s oprávněními impersonovaného účtu místo svých vlastních. Zatímco delegace umožňuje uživatelům jednat jménem jiných uživatelů, impersonace jim umožňuje jednat jako jiní uživatelé. Aspose.Email podporuje impersonaci Exchange. The EWSClient třída poskytuje ImpersonateUser a ResetImpersonation metody k usnadnění této funkce.

Pro provedení tohoto úkolu:

  1. Inicializovat ExchangeWebServiceClient pro uživatele 1.
  2. Inicializovat ExchangeWebServiceClient pro uživatele 2.
  3. Připojit testovací zprávy k účtům.
  4. Povolit impersonaci.
  5. Resetovat impersonaci.

Níže uvedený úryvek kódu ukazuje, jak použít EWSClient třída pro implementaci funkce impersonace.

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

Funkce Auto Discover pomocí EWS

Aspose.Email API vám umožňuje zjistit nastavení serveru Exchange pomocí 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);

Zrušit obnovení PST na server Exchange

Aspose.Email API umožňuje obnovit soubor PST na server Exchange. Pokud operace trvá dlouho kvůli velké velikosti souboru PST, může být nutné zadat kritéria pro zrušení operace. To lze dosáhnout pomocí API, jak ukazuje následující ukázkový kód.

Poznámka: Příklad také vyžaduje přidání následující třídy.


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