Полезни функции
Изпращане на съобщение с опция за гласуване
Microsoft Outlook позволява на потребителите да създават анкета, когато съставят ново съобщение. Това се постига чрез включване на опции за гласуване като Да, Не, Може би и др. Класът FollowUpOptions, предлаган от Aspose.Email, предоставя свойството VotingButtons, което може да се използва за задаване или получаване на стойността на опциите за гласуване. Тази статия предоставя подробен пример за създаване на MapiMessage с опции за гласуване за създаване на анкета и след това изпращане на съобщението чрез клиент за Exchange Web Service (EWS).
Създаване и изпращане на съобщение с опции за гласуване
Следният фрагмент от код показва как да създадете ново съобщение и след това да го изпратите с опции за гласуване.
String address = "firstname.lastname@aspose.com";
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
MailMessage message = createTestMessage(address);
// Set FollowUpOptions Buttons
FollowUpOptions options = new FollowUpOptions();
options.setVotingButtons("Yes;No;Maybe;Exactly!");
client.send(message, options);
Примерни методи, използвани в примери
Следният фрагмент от код показва как да се използват методите, използвани в горния пример.
private static MailMessage createTestMessage(String address) {
MailMessage eml = new MailMessage(address, address, "Flagged message",
"Make it nice and short, but descriptive. The description may appear in search engines' search results pages...");
return eml;
}
Създаване на RE и FW съобщения от MSG файлове
IEWSClient позволява на разработчиците да създават RE (Reply/Reply All) и FW (Forward) съобщения от изходно съобщение. Изходното съобщение се идентифицира чрез избор на конкретно ExchangeMessageInfo от ExchangeMessageInfoCollection получено чрез IEWSClient.listMessages(). Другият аргумент е действителният MailMessage за изпращане като RE или FW съобщение. Следният фрагмент от код показва как да се създаде примерен акаунт, който се използва за изпращане на съобщение, след което се демонстрират функциите Reply и Forward върху това примерно съобщение. За изпълнението на тази задача:
- Инициализирайте обекта IEWSClient, като предоставите валидни идентификационни данни.
- Изпратете няколко примерни съобщения.
- Извикайте функциите IEWSClient.reply(), IEWSClient.replyAll() и IEWSClient.forward() за изпращане на съобщения.
IEWSClient client = EWSClient.getEWSClient(mailboxUri, credential);
try {
MailMessage message = new MailMessage("user@domain.com", "user@domain.com", "TestMailRefw - " + UUID.randomUUID().toString(),
"TestMailRefw Implement ability to create RE and FW messages from source MSG file");
client.send(message);
ExchangeMessageInfoCollection messageInfoCol = client.listMessages(client.getMailboxInfo().getInboxUri());
if (messageInfoCol.size() == 1)
System.out.println("1 message in Inbox");
else
System.out.println("Error! No message in Inbox");
MailMessage message1 = new MailMessage("user@domain.com", "user@domain.com", "TestMailRefw - " + UUID.randomUUID().toString(),
"TestMailRefw Implement ability to create RE and FW messages from source MSG file");
client.send(message1);
messageInfoCol = client.listMessages(client.getMailboxInfo().getInboxUri());
if (messageInfoCol.size() == 2)
System.out.println("2 messages in Inbox");
else
System.out.println("Error! No new message in Inbox");
MailMessage message2 = new MailMessage("user@domain.com", "user@domain.com", "TestMailRefw - " + UUID.randomUUID().toString(),
"TestMailRefw Implement ability to create RE and FW messages from source MSG file");
message2.getAttachments().addItem(Attachment.createAttachmentFromString("Test attachment 1", "Attachment Name 1"));
message2.getAttachments().addItem(Attachment.createAttachmentFromString("Test attachment 2", "Attachment Name 2"));
// Reply, Replay All and forward Message
client.reply(message2, messageInfoCol.get_Item(0));
client.replyAll(message2, messageInfoCol.get_Item(0));
client.forward(message2, messageInfoCol.get_Item(0));
} catch (java.lang.RuntimeException ex) {
System.out.println("Error in program" + ex.getMessage());
}
Поддръжка на OAuth за EWS с Office 365
Aspose.Email API предоставя поддръжка за Exchange Web Service (EWS) с Office 365. API‑т EWSClient интерфейсът предоставя претоварен метод, който предоставя OAuthNetworkCredential като вход за достъп до Exchange акаунт чрез OAuth. Потребителят трябва да предостави Authority, Client Id, Client App Uri и параметрите Resource, за да функционира. Следният фрагмент от код показва поддръжка за OAuth за EWS с Office 365.
// token provider
/*ITokenProvider provider = new ITokenProvider() {
@Override
public void dispose() {
}
@Override
public OAuthToken getAccessToken(boolean ignoreExistingToken) {
return null;
}
@Override
public OAuthToken getAccessToken() {
return null;
}
};
NetworkCredential credentials = new OAuthNetworkCredential(provider);*/
// accessToken
NetworkCredential credentials = new OAuthNetworkCredential("accessToken");
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", credentials);
client.listMessages();
Поддръжка на логиране в Exchange клиенти
Aspose.Email API предоставя възможност за логиране на клиента на Exchange Web Service.
Регистриране за EWS клиент
client.setLogFileName("logs/ews");
// OR
EWSClient.setCommonLogFileName("logs/ews");
Добавяне на заглавки в EWS заявки
Aspose.Email API позволява добавяне на заглавки към заявките към Exchange. Това може да се използва за добавяне на заглавки към EWS заявките за различни цели. Един пример е добавянето на заглавката X-AnchorMailbox, която се използва за управление на проблемите с ограничаването на натоварването в Exchange сървъра. Методът addHeader на IEWSClient се използва за добавяне на заглавки към EWS заявките, както е показано в следния фрагмент от код.
final IEWSClient client = EWSClient.getEWSClient("exchange.domain.com/ews/Exchange.asmx", "username", "password", "");
try {
client.addHeader("X-AnchorMailbox", "username@domain.com");
ExchangeMessageInfoCollection messageInfoCol = client.listMessages(client.getMailboxInfo().getInboxUri());
} finally {
client.dispose();
}
Връщане на идентификатора на клиентската заявка в заглавката
Този return-client-request-id заглавката се изпраща в заявката и се използва от сървъра, за да определи дали client-request-id заглавката, зададена от клиента, трябва да бъде върната в отговора на сървъра. Следните методи се използват в тази операция:
- getReturnClientRequestId()
- setReturnClientRequestId(boolean value) - Получаване или задаване на флаг, който указва дали клиентът изисква сървърната страна да върне идентификатора на заявката.
try (IEWSClient client = createEWSClient())
{
// Client will create random id and pass it to the server.
// The server should include this id in request-id header of all responses.
client.setReturnClientRequestId(true);
client.setLogFileName("ews.log");
client.getMailboxInfo();
}
Работа с обединено съобщение
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. Следният фрагмент от код показва как се използва 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");
System.out.println("Connected to Exchange server...");
// Provide mail tips options
MailAddressCollection addrColl = new MailAddressCollection();
addrColl.addMailAddress(new MailAddress("test.exchange@ex2010.local", true));
addrColl.addMailAddress(new MailAddress("invalid.recipient@ex2010.local", true));
GetMailTipsOptions options = new GetMailTipsOptions(MailAddress.to_MailAddress("administrator@ex2010.local"), addrColl, MailTipsType.All);
// Get Mail Tips
MailTips[] tips = client.getMailTips(options);
// Display information about each Mail Tip
for (MailTips tip : tips) {
// Display Out of office message, if present
if (tip.getOutOfOffice() != null) {
System.out.println("Out of office: " + tip.getOutOfOffice().getReplyBody().getMessage());
}
// Display the invalid email address in recipient, if present
if (tip.getInvalidRecipient() == true) {
System.out.println("The recipient address is invalid: " + tip.getRecipientAddress());
}
}
Империониране в Exchange
Империонирането в Exchange позволява на някой да се представя като друг акаунт и да изпълнява задачи и операции, използвайки разрешенията на имитираната сметка вместо собствените си. Където делегирането позволява на потребителите да действат от името на други потребители, империонирането им позволява да действат като други потребители. Aspose.Email поддържа империониране в Exchange. 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 {
for (ExchangeMessageInfo messageInfo : (Iterable<ExchangeMessageInfo>) client1.listMessages(folder))
client1.deleteItem(messageInfo.getUniqueUri(), DeletionOptions.getDeletePermanently());
String subj1 = "NETWORKNET_33354 User User1";
client1.appendMessage(folder, new MailMessage("User1@exchange.conholdate.local", "To@aspsoe.com", subj1, ""));
for (ExchangeMessageInfo messageInfo : (Iterable<ExchangeMessageInfo>) client2.listMessages(folder))
client2.deleteItem(messageInfo.getUniqueUri(), DeletionOptions.getDeletePermanently());
String subj2 = "NETWORKNET_33354 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 {
for (ExchangeMessageInfo messageInfo : (Iterable<ExchangeMessageInfo>) client1.listMessages(folder))
client1.deleteItem(messageInfo.getUniqueUri(), DeletionOptions.getDeletePermanently());
for (ExchangeMessageInfo messageInfo : (Iterable<ExchangeMessageInfo>) client2.listMessages(folder))
client2.deleteItem(messageInfo.getUniqueUri(), DeletionOptions.getDeletePermanently());
} catch (java.lang.RuntimeException e) {
}
}
}
Функция Auto Discover с EWS
Aspose.Email API ви позволява да откриете настройките на Exchange Server, използвайки EWS клиента.
AutodiscoverService svc = new AutodiscoverService();
svc.setCredentials(new NetworkCredential(email, password));
IGenericDictionary</* UserSettingName */Integer, Object> userSettings = svc.getUserSettings(email, UserSettingName.ExternalEwsUrl).getSettings();
String ewsUrl = (String) userSettings.get_Item(UserSettingName.ExternalEwsUrl);
System.out.println("Auto discovered EWS Url: " + ewsUrl);
Прекратяване на възстановяване на PST в Exchange Server
Aspose.Email API ви позволява да възстановите PST файл в Exchange Server. Въпреки това, ако операцията отнема дълго поради голям размер на PST файла, може да се наложи да се зададе критерий за прекъсване на операцията. Това може да се постигне чрез API, както е показано в следния примерен код.
final IEWSClient client = EWSClient.getEWSClient("https://exchange.office365.com/ews/exchange.asmx", "username", "password");
try {
final long startTime = System.currentTimeMillis();
final AtomicInteger processedItems = new AtomicInteger(0);
final long S15 = 15 * 1000;
BeforeItemCallback callback = new BeforeItemCallback() {
public void invoke(ItemCallbackArgs item) {
if (System.currentTimeMillis() - startTime > S15) {
throw new AbortRestoreException();
}
processedItems.incrementAndGet();
}
};
try {
// create a test pst and add some test messages to it
PersonalStorage pst = PersonalStorage.create(new ByteArrayOutputStream(), FileFormatVersion.Unicode);
FolderInfo folder = pst.getRootFolder().addSubFolder("My test folder");
for (int i = 0; i < 20; i++) {
MapiMessage message = new MapiMessage("from@gmail.com", "to@gmail.com", "subj", "body");
folder.addMessage(message);
}
RestoreSettings rs = new RestoreSettings();
rs.setBeforeItemCallback(callback);
// now restore the PST with callback
client.restore(pst, rs);
System.out.println("Success!");
} catch (AbortRestoreException e) {
System.out.println("Timeout! " + processedItems.get());
}
} finally {
client.dispose();
}