Полезни функции в Aspose.Email за .NET
Работа с обединено съобщение
Aspose.Email може да извлича информация за обединено съобщение от Exchange Server 2010. Обединените съобщения, като получаване на конфигурационна информация, иницииране на изходящо обаждане, извличане на информация за телефонно обаждане по ID и прекъсване на обаждане по ID, в момента се поддържат. Следният примерен код показва как да се извлече конфигурационна информация за обединено съобщение от 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. Следният кодов фрагмент показва как да се използва the 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
Имперсонацията в Exchange позволява на някого да се представи за друг акаунт и да изпълнява задачи и операции, използвайки разрешенията на имперсоналения акаунт, вместо своите. Докато делегирането позволява на потребителите да действат от името на други потребители, имперсонацията им позволява да действат като други потребители. Aspose.Email поддържа имперсонация в Exchange. The EWSClient клас предоставя ImpersonateUser и ResetImpersonation методите за улесняване на тази функция.
За да изпълните тази задача:
- Инициализирайте ExchangeWebServiceClient за потребител 1.
- Инициализирайте ExchangeWebServiceClient за потребител 2.
- Прикрепете тестови съобщения към акаунтите.
- Активиране на представителството.
- Нулиране на представителството.
Следният кодов откъс показва как да използвате 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 { }
}
}
Функция Auto Discover с EWS
Aspose.Email API ви позволява да откриете настройките на Exchange Server, използвайки 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 Server
Aspose.Email API ви позволява да възстановите PST файл в Exchange Server. Въпреки това, ако операцията отнема дълго поради голям размер на 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}");
}