ميزات المرافق في Aspose.Email لـ .NET

العمل مع الرسائل الموحدة

يمكن لـ Aspose.Email استرجاع معلومات الرسائل الموحدة من Exchange Server 2010. تدعم الرسائل الموحدة حالياً الحصول على معلومات التكوين، بدء مكالمة صادرة، استرجاع معلومات المكالمة عبر معرف المكالمة، وإنهاء المكالمة عبر المعرف. تُظهر عينة الشيفرة التالية كيفية استرجاع معلومات تكوين الرسائل الموحدة من Microsoft Exchange Server 2010.

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

الحصول على نصائح البريد

أضاف Microsoft Exchange Server عدة ميزات جديدة مع Exchange Server 2010 و 2013. إحداها تتيح للمستخدمين الحصول على نصائح البريد أثناء كتابة رسالة بريد إلكتروني. هذه النصائح مفيدة للغاية لأنها تزود المستخدم بمعلومات قبل إرسال البريد. على سبيل المثال، إذا كان عنوان البريد الإلكتروني خاطئًا في قائمة المستلمين، تُظهر نصيحة لإعلامك بأن العنوان غير صالح. كما تتيح نصائح البريد رؤية ردود "خارج المكتب" قبل إرسال البريد: يرسل Exchange Server (2010 & 2013) نصيحة البريد عند كتابة الرسالة إذا كان أحد المستلمين أو أكثر قد فعل ردود "خارج المكتب". يلزم وجود Microsoft Exchange Server 2010 Service Pack 1 لجميع الميزات المعروضة في هذه المقالة. يوضح مقطع الشيفرة التالي كيفية استخدام الـ EWSClient فئة تستخدم خدمات ويب Exchange، المتاحة في Microsoft Exchange Server 2007 والإصدارات اللاحقة.

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

يفوض تمثيل Exchange شخصًا ما بتمثيل حساب آخر وأداء المهام والعمليات باستخدام أذونات الحساب الممثل بدلاً من أذوناته الخاصة. بينما يسمح التفويض للمستخدمين بالعمل نيابة عن مستخدمين آخرين، يتيح التمثيل لهم العمل كالمستخدمين الآخرين. تدعم Aspose.Email تمثيل Exchange. الـ EWSClient class يوفر الـ ImpersonateUser و ResetImpersonation الطرق لتسهيل هذه الميزة.

لإجراء هذه المهمة:

  1. تهيئة ExchangeWebServiceClient للمستخدم 1.
  2. تهيئة ExchangeWebServiceClient للمستخدم 2.
  3. إلحاق رسائل اختبار بالحسابات.
  4. تمكين الانتحال.
  5. إعادة تعيين الانتحال.

يوضح مقتطف الكود التالي كيفية استخدام EWSClient فئة لتنفيذ ميزة الانتحال.

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

ميزة الاكتشاف التلقائي باستخدام EWS

تتيح لك واجهة Aspose.Email اكتشاف إعدادات خادم Exchange باستخدام عميل 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);

إلغاء عملية استعادة PST إلى خادم Exchange

تتيح لك واجهة Aspose.Email استعادة ملف PST إلى خادم Exchange. ومع ذلك، إذا استغرقت العملية وقتًا طويلاً بسبب حجم ملف PST الكبير، قد تحتاج إلى تحديد معيار لإلغاء العملية. يمكن تحقيق ذلك باستخدام الواجهة كما هو موضح في عينة الشيفرة التالية.

ملاحظة: المثال يحتاج أيضًا إلى إضافة الفئة التالية.


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