Užitečné funkce
Odesílání zprávy s možností hlasování
Microsoft Outlook umožňuje uživatelům vytvořit průzkum při sestavování nové zprávy. To se provádí zahrnutím možností hlasování, jako jsou Ano, Ne, Možná, atd. Třída FollowUpOptions nabízená společností Aspose.Email poskytuje vlastnost VotingButtons, kterou lze použít k nastavení nebo získání hodnoty možností hlasování. Tento článek poskytuje podrobný příklad vytvoření MapiMessage s možnostmi hlasování pro vytvoření průzkumu a následné odeslání zprávy pomocí klienta Exchange Web Service (EWS).
Vytváření a odesílání zprávy s možnostmi hlasování
Následující úryvek kódu ukazuje, jak vytvořit novou zprávu a potom ji odeslat s možnostmi hlasování.
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);
Ukázkové metody použité v příkladech
Následující úryvek kódu ukazuje, jak použít metody použité v předchozím příkladu.
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;
}
Vytváření RE a FW zpráv ze souborů MSG
IEWSClient umožňuje vývojářům vytvořit RE (Reply/Reply All) a FW (Forward) zprávy ze zdrojové zprávy. Zdrojová zpráva je identifikována výběrem konkrétní ExchangeMessageInfo od ExchangeMessageInfoCollection získáno pomocí IEWSClient.listMessages(). Dalším argumentem je skutečný MailMessage k odeslání jako RE nebo FW zpráva. Následující úryvek kódu ukazuje, jak vytvořit ukázkový účet, který se použije k odeslání zprávy a poté jsou předvedeny funkce Odpovědi a Přeposlání na této ukázkové zprávě. K provedení tohoto úkolu:
- Inicializujte objekt IEWSClient zadáním platných přihlašovacích údajů.
- Odeslat několik ukázkových zpráv.
- Volat funkce IEWSClient.reply(), IEWSClient.replyAll() a IEWSClient.forward() pro odeslání zpráv.
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());
}
Podpora OAuth pro EWS s Office 365
Aspose.Email API poskytuje podporu pro Exchange Web Service (EWS) s Office 365. API’s EWSClient rozhraní poskytuje přetíženou metodu, která poskytuje OAuthNetworkCredential jako vstup pro přístup k účtu Exchange přes OAuth. Uživatel musí zadat Authority, Client Id, Client App Uri a parametry Resource, aby to fungovalo. Následující úryvek kódu ukazuje podporu OAuth pro EWS s 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();
Podpora logování v Exchange klientech
Aspose.Email API poskytuje možnost logování klienta Exchange Web Service.
Logování pro klienta EWS
client.setLogFileName("logs/ews");
// OR
EWSClient.setCommonLogFileName("logs/ews");
Přidávání hlaviček do požadavků EWS
Aspose.Email API umožňuje přidávat hlavičky do požadavků Exchange. To lze použít k přidání hlaviček do požadavků EWS pro různé účely. Jedním příkladem může být přidání hlavičky X-AnchorMailbox, která se používá k řízení problémů s omezením na serveru Exchange. Metoda addHeader rozhraní IEWSClient se používá k přidání hlaviček do požadavků EWS, jak je ukázáno v následujícím úryvku kódu.
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();
}
Vrátit ID požadavku klienta v hlavičce
The return-client-request-id hlavička je odeslána v požadavku a server ji používá k určení, zda client-request-id hlavička specifikovaná klientem by měla být vrácena v odpovědi serveru. Následující metody jsou v této operaci použity:
- getReturnClientRequestId()
- setReturnClientRequestId(boolean value) - Získat nebo nastavit příznak, který označuje, zda klient požaduje, aby server vrátil ID požadavku.
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();
}
Práce s jednotným zpracováním zpráv
Aspose.Email může získat informace o jednotném zpracování zpráv ze serveru Exchange 2010. Jednotné zpracování zahrnuje získání konfiguračních informací, zahájení odchozího hovoru, získání informací o hovoru podle ID a ukončení hovoru podle ID, a to je v současnosti podporováno. Následující ukázka kódu ukazuje, jak získat konfigurační informace o jednotném zpracování ze serveru Microsoft Exchange 2010.
IEWSClient client = EWSClient.getEWSClient(mailboxUri, credential);
UnifiedMessagingConfiguration umConf = client.getUMConfiguration();
Získávání tipů na e‑mail
Microsoft Exchange Server přidal několik nových funkcí v Exchange Server 2010 a 2013. Jedna z nich umožňuje uživatelům získat tipy na e‑mail při psaní zprávy. Tyto tipy jsou velmi užitečné, protože poskytují informace před odesláním e‑mailu. Například pokud je v seznamu příjemců špatná e‑mailová adresa, zobrazí se tip, který vás upozorní, že adresa je neplatná. Tipy také umožňují vidět odpovědi o nepřítomnosti před odesláním e‑mailu: Exchange Server (2010 a 2013) posílá tip, když se e‑mail píše, pokud jeden nebo více příjemců nastavil odpověď o nepřítomnosti. Pro všechny funkce předvedené v tomto článku je vyžadován Microsoft Exchange Server 2010 Service Pack 1. Následující úryvek kódu ukazuje, jak použít EWSClient třída používající Exchange Web Services, dostupná v Microsoft Exchange Server 2007 a novějších verzích.
// 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());
}
}
Impersonace v Exchange
Impersonace v Exchange umožňuje někomu se vydávat za jiný účet a provádět úkoly a operace s oprávněními imitovaného účtu místo svých vlastních. Zatímco delegace umožňuje uživatelům jednat jménem jiných uživatelů, impersonace jim umožňuje jednat jako jiní uživatelé. Aspose.Email podporuje impersonaci v Exchange. EWSClient třída poskytuje metody ImpersonateUser a ResetImpersonation pro usnadnění této funkce.
Pro provedení tohoto úkolu:
- Inicializovat ExchangeWebServiceClient pro uživatele 1.
- Inicializovat ExchangeWebServiceClient pro uživatele 2.
- Připojit testovací zprávy k účtům.
- Povolit impersonaci.
- Resetovat impersonaci.
Níže uvedený úryvek kódu ukazuje, jak použít EWSClient třída pro implementaci funkce impersonace.
// 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) {
}
}
}
Funkce Auto Discover pomocí EWS
Aspose.Email API vám umožňuje zjistit nastavení serveru Exchange pomocí klienta 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);
Zrušit obnovení PST na server Exchange
Aspose.Email API umožňuje obnovit soubor PST na server Exchange. Pokud operace trvá dlouho kvůli velké velikosti souboru PST, může být nutné zadat kritéria pro zrušení operace. To lze dosáhnout pomocí API, jak ukazuje následující ukázkový kód.
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();
}