उपयोगिता सुविधाएँ
वोटिंग विकल्प के साथ संदेश भेजना
Microsoft Outlook उपयोगकर्ताओं को नया संदेश तैयार करते समय मतदान बनाने की अनुमति देता है। यह हाँ, नहीं, शायद आदि जैसे वोटिंग विकल्पों को शामिल करके किया जाता है। Aspose.Email द्वारा प्रदान किया गया FollowUpOptions क्लास 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;
}
MSG फ़ाइलों से RE और FW संदेश बनाना
IEWSClient डेवलपर्स को स्रोत संदेश से RE (Reply/Reply All) और FW (Forward) संदेश बनाने देता है। स्रोत संदेश को विशेष चुनकर पहचाना जाता है ExchangeMessageInfo से ExchangeMessageInfoCollection IEWSClient.listMessages() द्वारा प्राप्त। अन्य तर्क वास्तविक है MailMessage RE या FW संदेश के रूप में भेजने के लिए। निम्नलिखित कोड स्निपेट दिखाता है कि कैसे एक नमूना खाता बनाया जाए जिसका उपयोग संदेश भेजने के लिए किया जाता है और फिर उस नमूना संदेश के खिलाफ रिप्लाई और फॉरवर्ड सुविधाओं को प्रदर्शित किया जाता है। इस कार्य को करने के लिए:
- वैध क्रेडेंशियल्स प्रदान करके 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());
}
Office 365 के साथ EWS के लिए OAuth समर्थन
Aspose.Email API Office 365 के साथ Exchange Web Service (EWS) के लिए समर्थन प्रदान करता है। API का EWSClient इंटरफ़ेस एक ओवरलोड मेथड प्रदान करता है जो देता है OAuthNetworkCredential OAuth के माध्यम से एक्सचेंज खाते तक पहुंचने के लिए इनपुट के रूप में। उपयोगकर्ता को इस कार्य के लिए Authority, Client Id, Client App Uri, और Resource पैरामीटर प्रदान करने की आवश्यकता होती है। निम्नलिखित कोड स्निपेट Office 365 के साथ EWS के लिए OAuth समर्थन दिखाता है।
// 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();
एक्सचेंज क्लाइंट्स में लॉगिंग समर्थन
Aspose.Email API एक्सचेंज वेब सर्विस क्लाइंट की लॉगिंग सुविधा प्रदान करने की क्षमता देता है।
EWS क्लाइंट के लिए लॉगिंग
client.setLogFileName("logs/ews");
// OR
EWSClient.setCommonLogFileName("logs/ews");
EWS अनुरोधों में हेडर जोड़ना
Aspose.Email API एक्सचेंज अनुरोधों में हेडर जोड़ने की अनुमति देता है। इसे विभिन्न उद्देश्यों के लिए विभिन्न हेडर को EWS अनुरोधों में जोड़ने के लिए उपयोग किया जा सकता है। एक उदाहरण है X-AnchorMailbox हेडर जोड़ना, जिसका उपयोग एक्सचेंज सर्वर पर थ्रॉटलिंग समस्याओं को प्रबंधित करने के लिए किया जाता है। निम्नलिखित कोड स्निपेट में दिखाए अनुसार IEWSClient की addHeader मेथड का उपयोग करके 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();
}
हेडर में क्लाइंट अनुरोध ID लौटाएँ
यह return-client-request-id हेडर अनुरोध में भेजा जाता है और सर्वर द्वारा यह निर्धारित करने के लिए उपयोग किया जाता है कि client-request-id क्लाइंट द्वारा निर्दिष्ट हेडर को सर्वर प्रतिक्रिया में वापस किया जाना चाहिए। इस ऑपरेशन में निम्नलिखित मेथड्स उपयोग किए जाते हैं:
- getReturnClientRequestId()
- setReturnClientRequestId(boolean value) - यह संकेत देने के लिए फ़्लैग प्राप्त करें या सेट करें कि क्या क्लाइंट को सर्वर से अनुरोध 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();
}
एकीकृत मैसेजिंग के साथ कार्य करना
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());
}
}
एक्सचेंज इम्पर्सोनेशन
एक्सचेंज इम्पर्सोनेशन किसी को दूसरे खाते की नकल करके उसके अनुमतियों से कार्य करने की अनुमति देता है, न कि अपने स्वयं के। जहाँ डेलीगेशन उपयोगकर्ताओं को दूसरे उपयोगकर्ताओं की ओर से कार्य करने देता है, इम्पर्सोनेशन उन्हें दूसरे उपयोगकर्ता के रूप में कार्य करने देता है। Aspose.Email एक्सचेंज इम्पर्सोनेशन का समर्थन करता है। यह EWSClient क्लास इस सुविधा को साकार करने के लिए ImpersonateUser और ResetImpersonation मेथड्स प्रदान करता है।
इस कार्य को करने के लिए:
- उपयोगकर्ता 1 के लिए ExchangeWebServiceClient को प्रारंभ करें।
- उपयोगकर्ता 2 के लिए ExchangeWebServiceClient को प्रारंभ करें।
- परीक्षण संदेश खातों में जोड़ें।
- इम्पर्सोनेशन सक्षम करें।
- इम्पर्सोनेशन रीसेट करें।
निम्न कोड स्निपेट दिखाता है कि आप कैसे उपयोग करें 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) {
}
}
}
EWS का उपयोग कर ऑटो डिस्कवर्स सुविधा
Aspose.Email API आपको 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 पुनर्स्थापना ऑपरेशन को रोकें
Aspose.Email API आपको एक PST फ़ाइल को एक्सचेंज सर्वर में पुनर्स्थापित करने की अनुमति देता है। हालांकि, यदि ऑपरेशन बड़े आकार की 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();
}