Verktygsfunktioner i Aspose.Email för .NET
Arbeta med Unified Messaging
Aspose.Email kan hämta information om unified messaging från Exchange Server 2010. Unified messaging, såsom att hämta konfigurationsinformation, initiera ett utgående samtal, hämta samtalsinformation via samtals‑ID och avsluta ett samtal via ID, stöds för närvarande. Följande kodexempel visar hur du hämtar konfigurationsinformation för unified messaging från Microsoft Exchange Server 2010.
IEWSClient client = EWSClient.GetEWSClient(mailboxUri, credential);
UnifiedMessagingConfiguration umConf = client.GetUMConfiguration();
Hämta mejltips
Microsoft Exchange Server lade till flera nya funktioner med Exchange Server 2010 och 2013. En av dem låter användare få e‑posttips när de skriver ett e‑postmeddelande. Dessa tips är mycket användbara eftersom de ger information innan e‑posten skickas. Till exempel, om en e‑postadress är fel i mottagarlistan visas ett tips som låter dig veta att adressen är ogiltig. E‑posttips låter också att du ser frånvarokommender innan du skickar ett e‑postmeddelande: Exchange Server (2010 & 2013) skickar tipset när e‑posten skrivs om en eller flera mottagare har ställt in frånvarokommender. Microsoft Exchange Server 2010 Service Pack 1 krävs för alla funktioner som demonstreras i den här artikeln. Följande kodsnutt visar hur du använder EWSClient klass som använder Exchange Web Services, tillgänglig i Microsoft Exchange Server 2007 och senare versioner.
// 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‑impersonering
Exchange‑impersonation gör att någon kan imitera ett annat konto och utföra uppgifter och operationer med det imiterade kontots behörigheter istället för sina egna. Där delegation låter användare agera på uppdrag av andra användare, möjliggör impersonation att de agerar som andra användare. Aspose.Email stöder Exchange‑impersonation. The EWSClient klass tillhandahåller ImpersonateUser och ResetImpersonation metoder för att underlätta denna funktion.
För att utföra detta:
- Initiera ExchangeWebServiceClient för användare 1.
- Initiera ExchangeWebServiceClient för användare 2.
- Lägg till testmeddelanden till kontona.
- Aktivera impersonering.
- Återställ impersonering.
Följande kodsnutt visar hur du använder EWSClient klass för att implementera impersoneringsfunktionen.
// 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-funktion med EWS
Aspose.Email API låter dig upptäcka Exchange‑serverinställningar med hjälp av EWS‑klienten.
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);
Avbryt PST‑återställning till Exchange‑server
Aspose.Email API låter dig återställa en PST‑fil till Exchange‑servern. Om åtgärden tar lång tid på grund av en stor PST‑fil kan det vara nödvändigt att ange kriterier för att avbryta operationen. Detta kan göras med API‑et enligt följande exempelkod.
Obs: Exemplet kräver att följande klass också läggs till.
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}");
}