Hulpfuncties in Aspose.Email voor .NET

Werken met Unified Messaging

Aspose.Email kan unified messaging‑informatie ophalen van Exchange Server 2010. Unified messaging zoals het verkrijgen van configuratie‑informatie, een uitgaand gesprek starten, gespreksinformatie opvragen via gespreks‑ID en een gesprek beëindigen via ID wordt momenteel ondersteund. Het volgende codevoorbeeld toont hoe u unified messaging‑configuratie‑informatie van Microsoft Exchange Server 2010 kunt ophalen.

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

E‑mailtips verkrijgen

Microsoft Exchange Server heeft met Exchange Server 2010 en 2013 verschillende nieuwe functies toegevoegd. Een daarvan stelt gebruikers in staat om mailtips te krijgen tijdens het opstellen van een e‑mailbericht. Deze tips zijn zeer nuttig omdat ze informatie bieden voordat de e‑mail wordt verzonden. Bijvoorbeeld, als een e‑mailadres onjuist is in de ontvangerslijst, wordt een tip weergegeven die aangeeft dat het e‑mailadres ongeldig is. Mailtips laten je ook out‑of‑office-antwoorden zien voordat je een e‑mail verstuurt: Exchange Server (2010 & 2013) verzendt de mailtip tijdens het opstellen van de e‑mail wanneer één of meer ontvangers een out‑of‑office-antwoord hebben ingesteld. Microsoft Exchange Server 2010 Service Pack 1 is vereist voor alle functies die in dit artikel worden gedemonstreerd. Het volgende codefragment laat zien hoe je de EWSClient klasse die Exchange Web Services gebruikt, beschikbaar in Microsoft Exchange Server 2007 en latere versies.

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

Exchange-imitatie

Exchange-imitatie maakt het mogelijk dat iemand een ander account imiteert en taken en bewerkingen uitvoert met de rechten van het geïmiteerde account in plaats van die van henzelf. Waar delegatie gebruikers toestaat om namens anderen te handelen, laat impersonatie hen toe als andere gebruikers op te treden. Aspose.Email ondersteunt Exchange-imitatie. De EWSClient class biedt de ImpersonateUser en ResetImpersonation methoden om deze functie te faciliteren.

Om deze taak uit te voeren:

  1. Initialiseer de ExchangeWebServiceClient voor gebruiker 1.
  2. Initialiseer de ExchangeWebServiceClient voor gebruiker 2.
  3. Testberichten aan de accounts toevoegen.
  4. Imitatie inschakelen.
  5. Imitatie resetten.

De volgende codefragment laat zien hoe je de EWSClient klasse om de imitatie‑functie te implementeren.

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

Auto‑discover functie gebruiken met EWS

Aspose.Email API stelt u in staat de Exchange Server-instellingen te ontdekken met de EWS-client. 

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

PST-herstel naar Exchange Server afbreken

Aspose.Email API stelt u in staat een PST‑bestand naar Exchange Server te herstellen. Als de bewerking lang duurt vanwege een groot PST‑bestand, kan het nodig zijn criteria op te geven om de bewerking af te breken. Dit kan worden bereikt met behulp van de API, zoals getoond in de volgende voorbeeldcode.

Opmerking: Het voorbeeld vereist dat de volgende klasse ook wordt toegevoegd.


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