תכונות נוחות ב‑Aspose.Email עבור .NET
עבודה עם הודעות מאוחדות
Aspose.Email יכולה לאחזר מידע על הודעות מאוחדות (Unified Messaging) מ-Exchange Server 2010. הודעות מאוחדות כגון קבלת מידע תצורה, יזום שיחה יוצאת, אחזור מידע על שיחה בטלפון לפי מזהה השיחה וסיום שיחה לפי מזהה נתמכת כיום. קטע הקוד הבא מציג כיצד לאחזר מידע תצורת הודעות מאוחדות מ-Microsoft Exchange Server 2010.
IEWSClient client = EWSClient.GetEWSClient(mailboxUri, credential);
UnifiedMessagingConfiguration umConf = client.GetUMConfiguration();
קבלת טיפים למייל
שרת Microsoft Exchange הוסיף כמה תכונות חדשות ב‑Exchange Server 2010 ו‑2013. אחת מהן מאפשרת למשתמשים לקבל טיפים למייל בעת כתיבת הודעת דואר אלקטרוני. טיפים אלה מאוד שימושיים כיוון שהם מספקים מידע לפני שליחת המייל. לדוגמה, אם כתובת דואר אלקטרוני שגויה ברשימת הנמענים, יוצג טיפ שמודיע שהכתובת אינה תקינה. טיפים למייל גם מאפשרים לראות תגובות מחוץ למשרד לפני שליחת המייל: Exchange Server (2010 & 2013) שולח את הטיפ בזמן כתיבת המייל אם אחד או יותר מהנמענים הגדיר תגובה מחוץ למשרד. נדרש Microsoft Exchange Server 2010 Service Pack 1 לכל התכונות שמוצגות במאמר זה. קטע הקוד הבא מציג כיצד להשתמש ב‑the EWSClient class שמשתמשת ב-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 class מספקת את ImpersonateUser ו ResetImpersonation שיטות כדי להקל על תכונה זו.
כדי לבצע משימה זו:
- אתחול ExchangeWebServiceClient עבור משתמש 1.
- אתחול ExchangeWebServiceClient עבור משתמש 2.
- הוספת הודעות בדיקה לחשבונות.
- הפעלת התחזות.
- איפוס התחזות.
קטעת הקוד הבא מראה לך כיצד להשתמש ב- EWSClient class למימוש תכונת ההתחזות.
// 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 API מאפשרת לך לגלות את ההגדרות של שרת 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 API מאפשרת לשחזר קובץ 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}");
}