Fitur Utilitas dalam Aspose.Email untuk .NET
Bekerja dengan Pesan Terpadu
Aspose.Email dapat mengambil informasi pesan terpadu dari Exchange Server 2010. Pesan terpadu seperti mendapatkan informasi konfigurasi, memulai panggilan keluar, mengambil informasi panggilan telepon berdasarkan ID panggilan, dan memutuskan panggilan telepon berdasarkan ID saat ini didukung. Contoh kode berikut menunjukkan cara mengambil informasi konfigurasi pesan terpadu dari Microsoft Exchange Server 2010.
IEWSClient client = EWSClient.GetEWSClient(mailboxUri, credential);
UnifiedMessagingConfiguration umConf = client.GetUMConfiguration();
Mendapatkan Tip Email
Microsoft Exchange Server menambahkan beberapa fitur baru dengan Exchange Server 2010 dan 2013. Salah satunya memungkinkan pengguna mendapatkan tip email saat menyusun pesan email. Tip ini sangat berguna karena memberikan informasi sebelum email dikirim. Misalnya, jika alamat email salah dalam daftar penerima, tip akan ditampilkan memberi tahu bahwa alamat email tidak valid. Tip email juga memungkinkan Anda melihat balasan out of office sebelum mengirim email: Exchange Server (2010 & 2013) mengirim tip email saat email sedang disusun jika satu atau lebih penerima telah mengatur balasan out of office. Microsoft Exchange Server 2010 Service Pack 1 diperlukan untuk semua fitur yang ditunjukkan dalam artikel ini. Cuplikan kode berikut menunjukkan cara menggunakan EWSClient kelas yang menggunakan Exchange Web Services, tersedia di Microsoft Exchange Server 2007 dan versi setelahnya.
// 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);
}
}
Impersonasi Exchange
Impersonasi Exchange memungkinkan seseorang meniru akun lain dan melakukan tugas serta operasi menggunakan izin akun yang ditiru alih-alih miliknya sendiri. Di mana delegasi memungkinkan pengguna bertindak atas nama pengguna lain, Impersonasi memungkinkan mereka bertindak sebagai pengguna lain. Aspose.Email mendukung Impersonasi Exchange. The EWSClient class menyediakan ImpersonateUser dan ResetImpersonation metode untuk memfasilitasi fitur ini.
Untuk melakukan tugas ini:
- Inisialisasi ExchangeWebServiceClient untuk pengguna 1.
- Inisialisasi ExchangeWebServiceClient untuk pengguna 2.
- Tambahkan pesan tes ke akun.
- Aktifkan Impersonasi.
- Reset Impersonasi.
Potongan kode berikut menunjukkan cara menggunakan EWSClient kelas untuk mengimplementasikan fitur Impersonasi.
// 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 { }
}
}
Fitur Auto Discover menggunakan EWS
Aspose.Email API memungkinkan Anda menemukan pengaturan Exchange Server menggunakan EWS Client.
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);
Batalkan Pemulihan PST ke Operasi Exchange Server
Aspose.Email API memungkinkan Anda memulihkan file PST ke Exchange Server. Namun, jika operasi memakan waktu lama karena ukuran file PST yang besar, mungkin perlu menentukan kriteria untuk membatalkan operasi. Hal ini dapat dicapai menggunakan API seperti yang ditunjukkan pada contoh kode berikut.
Catatan: Contoh ini memerlukan kelas berikut juga ditambahkan.
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}");
}