ویژگی‌های کاربردی در Aspose.Email برای .NET

کار با پیام‌رسانی یکپارچه

Aspose.Email می‌تواند اطلاعات پیام‌رسانی یکپارچه را از Exchange Server 2010 بازیابی کند. پیام‌رسانی یکپارچه مانند دریافت اطلاعات پیکربندی، آغاز یک تماس خروجی، بازیابی اطلاعات تماس تلفنی بر اساس شناسه تماس و قطع تماس بر اساس شناسه در حال حاضر پشتیبانی می‌شود. نمونه کد زیر نشان می‌دهد چگونه اطلاعات پیکربندی پیام‌رسانی یکپارچه را از Microsoft Exchange Server 2010 بازیابی کنید.

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

دریافت نکات ایمیلی

سرور مایکروسافت اکسچینج در نسخه‌های 2010 و 2013 چندین قابلیت جدید اضافه کرد. یکی از این قابلیت‌ها به کاربران امکان دریافت نکات ایمیل هنگام نوشتن پیام ایمیل را می‌دهد. این نکات بسیار مفید هستند زیرا قبل از ارسال ایمیل اطلاعاتی را ارائه می‌دهند. به عنوان مثال، اگر آدرس ایمیل در فهرست گیرندگان اشتباه باشد، یک نکته نمایش داده می‌شود تا به شما بگوید آدرس ایمیل نامعتبر است. نکات ایمیل همچنین به شما اجازه می‌دهند پیش از ارسال ایمیل، پاسخ‌های خارج از دفتر را ببینید: سرور اکسچینج (2010 و 2013) هنگام نوشتن ایمیل، اگر یک یا چند گیرنده پاسخ‌نامهٔ خارج از دفتر تنظیم کرده باشند، نکتهٔ ایمیل را می‌فرستد. سرویس پک 1 سرور مایکروسافت اکسچینج 2010 برای تمام ویژگی‌های نشان داده شده در این مقاله لازم است. قطعه کد زیر نشان می‌دهد چگونه از EWSClient کلاسی که از Exchange Web Services استفاده می‌کند، موجود در 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

امتیاز نمایندگی اکسچینج به شخصی اجازه می‌دهد که به جای حساب خود، حساب دیگری را تقلید کند و وظایف و عملیات را با مجوزهای حساب تقلید شده انجام دهد. در حالی که واگذاری به کاربران امکان می‌دهد به نمایندگی از دیگران عمل کنند، تقلید به آنها اجازه می‌دهد همانند کاربران دیگر رفتار کنند. Aspose.Email از نمایندگی اکسچینج پشتیبانی می‌کند. EWSClient کلاس فراهم می‌کند ImpersonateUser و ResetImpersonation متدها برای تسهیل این ویژگی.

برای انجام این کار:

  1. راه‌اندازی ExchangeWebServiceClient برای کاربر ۱.
  2. راه‌اندازی ExchangeWebServiceClient برای کاربر ۲.
  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

API 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

API Aspose.Email به شما امکان بازیابی یک فایل PST به سرور Exchange را می‌دهد. با این حال، اگر عملیات به دلیل حجم بزرگ فایل PST زمان زیادی ببرد، ممکن است نیاز به تعیین معیاری برای قطع عملیات باشد. این کار می‌تواند با استفاده از API همان‌طور که در کد نمونه زیر نشان داده شده انجام شود.

توجه: مثال به کلاس زیر نیز نیاز دارد که اضافه شود.


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