Verktygsfunktioner
Skicka ett meddelande med röstningsalternativ
Microsoft Outlook låter användare skapa en omröstning när de skriver ett nytt meddelande. Detta görs genom att inkludera röstningsalternativ som Ja, Nej, Kanske osv. Klassen FollowUpOptions i Aspose.Email tillhandahåller egenskapen VotingButtons som kan användas för att sätta eller hämta värdet på röstningsalternativen. Denna artikel ger ett detaljerat exempel på hur man skapar ett MapiMessage med röstningsalternativ för en omröstning och sedan skickar meddelandet med Exchange Web Service (EWS)‑klienten.
Skapa och skicka ett meddelande med röstningsalternativ
Följande kodavsnitt visar hur du skapar ett nytt meddelande och sedan skickar det med röstningsalternativ.
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);
Exempel på metoder som används i exempel
Följande kodavsnitt visar hur du använder metoderna i ovanstående exempel.
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;
}
Skapa RE‑ och FW‑meddelanden från MSG‑filer
IEWSClient låter utvecklare skapa RE (Reply/Reply All) och FW (Forward)-meddelanden från ett källmeddelande. Källmeddelandet identifieras genom att välja ett specifikt ExchangeMessageInfo från ExchangeMessageInfoCollection hämtas via IEWSClient.listMessages(). Den andra argumentet är själva MailMessage att skickas som RE‑ eller FW‑meddelande. Följande kodavsnitt visar hur du skapar ett exempelkonto som används för att skicka ett meddelande och sedan demonstreras svar‑ och vidarebefordringsfunktionerna på det exemplet. Så här gör du:
- Initiera IEWSClient‑objektet genom att ange giltiga autentiseringsuppgifter.
- Skicka några exempelmeddelanden.
- Anropa funktionerna IEWSClient.reply(), IEWSClient.replyAll() och IEWSClient.forward() för att skicka meddelanden.
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‑stöd för EWS med Office 365
Aspose.Email API ger stöd för Exchange Web Service (EWS) med Office 365. API:ets EWSClient gränssnittet tillhandahåller en överlagrad metod som ger OAuthNetworkCredential som indata för åtkomst till Exchange‑kontot via OAuth. Användaren måste ange Authority, Client Id, Client App Uri och Resource‑parametrarna för att detta ska fungera. Följande kodavsnitt visar OAuth‑stöd för EWS med 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();
Stöd för loggning i Exchange‑klienter
Aspose.Email API möjliggör loggningsfunktion för Exchange Web Service‑klienten.
Loggning för EWS‑klient
client.setLogFileName("logs/ews");
// OR
EWSClient.setCommonLogFileName("logs/ews");
Lägga till headers i EWS‑förfrågningar
Aspose.Email API tillåter att lägga till headers i Exchange‑förfrågningar. Detta kan användas för att lägga till olika headers i EWS‑förfrågningarna för olika ändamål. Ett exempel är att lägga till X-AnchorMailbox‑headern som används för att hantera begränsningsproblem på Exchange‑servern. Metoden addHeader i IEWSClient används för att lägga till headers i EWS‑förfrågningarna enligt följande kodavsnitt.
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();
}
Returnera klientens begäran‑ID i headern
Den return-client-request-id header skickas i begäran och används av servern för att avgöra om den client-request-id header som specificerats av klienten ska returneras i serverns svar. Följande metoder används i denna operation:
- getReturnClientRequestId()
- setReturnClientRequestId(boolean value) - Hämta eller sätt en flagga för att indikera om klienten kräver att servern returnerar begärans ID.
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();
}
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 la till flera nya funktioner i Exchange Server 2010 och 2013. En av dem låter användare få mejltips när de skriver ett e‑postmeddelande. Dessa tips är mycket användbara eftersom de ger information innan meddelandet skickas. Till exempel, om en e‑postadress är felaktig i mottagarlistan visas ett tips som meddelar att adressen är ogiltig. Mejltips låter dig också se frånvaromeddelanden innan du skickar ett e‑postmeddelande: Exchange Server (2010 & 2013) skickar mejltipset när meddelandet skrivs om någon av mottagarna har ett aktivt frånvaromeddelande. Microsoft Exchange Server 2010 Service Pack 1 krävs för alla funktioner som demonstreras i denna artikel. Följande kodavsnitt visar hur man 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");
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‑impersonering
Exchange‑impersonering låter någon agera som ett annat konto och utföra uppgifter med det efterhärmlade kontots behörigheter istället för sina egna. Där delegation låter användare agera på uppdrag av andra, låter impersonering dem agera som andra användare. Aspose.Email stödjer Exchange‑impersonering. Den EWSClient klass tillhandahåller metoderna ImpersonateUser och ResetImpersonation 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 {
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-funktion med EWS
Aspose.Email API låter dig upptäcka Exchange‑serverinställningar med hjälp av EWS‑klienten.
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);
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.
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();
}