Dienstprogramme in Aspose.Email für .NET
Arbeiten mit Unified Messaging
Aspose.Email kann vereinte Messaging‑Informationen von Exchange Server 2010 abrufen. Vereintes Messaging wie das Abrufen von Konfigurationsinformationen, das Initiieren eines ausgehenden Anrufs, das Abrufen von Anrufinformationen per Anruf‑ID und das Trennen eines Anrufs per ID wird derzeit unterstützt. Das folgende Code‑Beispiel zeigt, wie man die Konfigurationsinformationen für vereintes Messaging von Microsoft Exchange Server 2010 abruft.
IEWSClient client = EWSClient.GetEWSClient(mailboxUri, credential);
UnifiedMessagingConfiguration umConf = client.GetUMConfiguration();
Mail‑Tips abrufen
Microsoft Exchange Server hat mit Exchange Server 2010 und 2013 mehrere neue Funktionen hinzugefügt. Eine davon ermöglicht es Benutzern, beim Verfassen einer E‑Mail‑Nachricht Mail‑Tipps zu erhalten. Diese Tipps sind sehr nützlich, da sie Informationen bereitstellen, bevor die E‑Mail gesendet wird. Beispielsweise wird ein Hinweis angezeigt, wenn im Empfängerfeld eine falsche E‑Mail‑Adresse steht, um Sie darüber zu informieren, dass die Adresse ungültig ist. Mail‑Tipps zeigen zudem Abwesenheitsantworten an, bevor die E‑Mail gesendet wird: Exchange Server (2010 & 2013) sendet den Mail‑Tipp, während die E‑Mail verfasst wird, wenn einer oder mehrere Empfänger eine Abwesenheitsantwort eingerichtet haben. Für alle in diesem Artikel demonstrierten Funktionen ist Microsoft Exchange Server 2010 Service Pack 1 erforderlich. Der folgende Code‑Abschnitt zeigt, wie Sie die EWSClient Klasse, die Exchange Web Services verwendet und seit Microsoft Exchange Server 2007 und späteren Versionen verfügbar ist.
// 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‑Impersonation
Exchange‑Impersonation ermöglicht es jemandem, ein anderes Konto zu impersonieren und Aufgaben sowie Vorgänge mit den Berechtigungen des impersonierten Kontos anstelle seiner eigenen durchzuführen. Während Delegierung Benutzern erlaubt, im Namen anderer zu handeln, erlaubt Impersonation ihnen, als andere Benutzer zu agieren. Aspose.Email unterstützt Exchange‑Impersonation. Die EWSClient class provides the ImpersonateUser und ResetImpersonation Methoden, um diese Funktion zu ermöglichen.
Um diese Aufgabe auszuführen:
- ExchangeWebServiceClient für Benutzer 1 initialisieren.
- ExchangeWebServiceClient für Benutzer 2 initialisieren.
- Testnachrichten an die Konten anhängen.
- Impersonation aktivieren.
- Impersonation zurücksetzen.
Das folgende Code‑Snippet zeigt, wie Sie die EWSClient Klasse zur Implementierung der Impersonations‑Funktion.
// 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 mit EWS
Die Aspose.Email‑API ermöglicht es, über den EWS‑Client Einstellungen des Exchange‑Servers zu ermitteln.
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‑Wiederherstellung auf Exchange‑Server abbrechen
Die Aspose.Email‑API ermöglicht das Wiederherstellen einer PST‑Datei auf einem Exchange‑Server. Wenn der Vorgang aufgrund einer großen PST‑Datei lange dauert, kann es notwendig sein, ein Kriterium zum Abbrechen des Vorgangs anzugeben. Dies kann mit der API erreicht werden, wie im folgenden Beispielcode gezeigt.
Hinweis: Das Beispiel erfordert außerdem das Hinzufügen der folgenden Klasse.
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}");
}