Exchange Server पर फ़ोल्डर्स के साथ काम करना
सर्वर से सभी फ़ोल्डर सूचीबद्ध करना
Aspose.Email API एक्सचेंज सर्वर से कनेक्ट होने और सभी फ़ोल्डर तथा सबफ़ोल्डर की सूची बनाने की क्षमता प्रदान करती है। आप प्रत्येक फ़ोल्डर से सभी सबफ़ोल्डर को पुनरावृत्त रूप से भी प्राप्त कर सकते हैं। यह एक्सचेंज क्लाइंट से एक्सचेंज वेब सर्विस (EWS) का उपयोग करके पेजिंग के साथ फ़ोल्डरों को क्रमांकित करने की क्षमता भी देता है। यह लेख दिखाता है कि एक्सचेंज सर्वर से सभी सबफ़ोल्डर कैसे प्राप्त करें और पेजिनेशन के साथ फ़ोल्डर को कैसे पुनः प्राप्त करें।
निम्नलिखित कोड स्निपेट दिखाता है कि कैसे Exchange सर्वर से फ़ोल्डर सूचीबद्ध किए जाएँ।
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
public static void run() {
try {
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
System.out.println("Downloading all messages from Inbox....");
ExchangeMailboxInfo mailboxInfo = client.getMailboxInfo();
System.out.println("Mailbox URI: " + mailboxInfo.getMailboxUri());
String rootUri = client.getMailboxInfo().getRootUri();
// List all the folders from Exchange server
ExchangeFolderInfoCollection folderInfoCollection = client.listSubFolders(rootUri);
for (ExchangeFolderInfo folderInfo : (Iterable<ExchangeFolderInfo>) folderInfoCollection) {
// Call the recursive method to read messages and get sub-folders
listSubFolders(client, folderInfo);
}
System.out.println("All messages downloaded.");
} catch (java.lang.RuntimeException ex) {
System.out.println(ex.getMessage());
}
}
private static void listSubFolders(IEWSClient client, ExchangeFolderInfo folderInfo) {
// Create the folder in disk (same name as on IMAP server)
System.out.println(folderInfo.getDisplayName());
try {
// If this folder has sub-folders, call this method recursively to get messages
ExchangeFolderInfoCollection folderInfoCollection = client.listSubFolders(folderInfo.getUri());
for (ExchangeFolderInfo subfolderInfo : (Iterable<ExchangeFolderInfo>) folderInfoCollection) {
listSubFolders(client, subfolderInfo);
}
} catch (java.lang.RuntimeException e) {
}
}
EWS के उपयोग से फ़ोल्डर प्रकार की जानकारी प्राप्त करें
यह FolderType द्वारा प्रदान की गई प्रॉपर्टी ExchangeFolderInfo क्लास का उपयोग फ़ोल्डर प्रकार के बारे में जानकारी प्राप्त करने के लिए किया जा सकता है। नीचे दिए गए कोड नमूने में जैसा दिखाया गया है।
IEWSClient client = EWSClient.getEWSClient(mailboxUri, credentials);
ExchangeFolderInfoCollection folderInfoCol = client.listSubFolders(client.getMailboxInfo().getRootUri());
for (ExchangeFolderInfo folderInfo : (Iterable<ExchangeFolderInfo>) folderInfoCol) {
switch (folderInfo.getFolderType()) {
case ExchangeFolderType.Appointment:
// handle Appointment
break;
case ExchangeFolderType.Contact:
// handle Contact
break;
case ExchangeFolderType.Task:
// handle Task
break;
case ExchangeFolderType.Note:
// handle email message
break;
case ExchangeFolderType.StickyNote:
// handle StickyNote
break;
case ExchangeFolderType.Journal:
// handle Journal
break;
default:
break;
}
}
EWS के साथ पेजिंग समर्थन का उपयोग करके फ़ोल्डरों को क्रमांकित करना
निम्न कोड स्निपेट दिखाता है कि आप EWS का उपयोग करके पेजिंग समर्थन कैसे उपयोग कर सकते हैं।
// Create instance of ExchangeWebServiceClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "UserName", "Password");
// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());
int itemsPerPage = 5;
List<PageInfo> pages = new ArrayList<PageInfo>();
PageInfo pagedMessageInfoCol = client.listMessagesByPage(client.getMailboxInfo().getInboxUri(), itemsPerPage);
pages.add(pagedMessageInfoCol);
while (!pagedMessageInfoCol.getLastPage()) {
pagedMessageInfoCol = client.listMessagesByPage(client.getMailboxInfo().getInboxUri(), itemsPerPage);
pages.add(pagedMessageInfoCol);
}
pagedMessageInfoCol = client.listMessagesByPage(client.getMailboxInfo().getInboxUri(), itemsPerPage);
while (!pagedMessageInfoCol.getLastPage()) {
client.listMessages(client.getMailboxInfo().getInboxUri());
}
मेलबॉक्स के कस्टम फ़ोल्डर या सबफ़ोल्डर तक पहुंचना
IEWSClient डेवलपर्स को मेलबॉक्स से किसी भी कस्टम फ़ोल्डर या सबफ़ोल्डर तक पहुंचने देता है। यह folderExists() फ़ंक्शन का IEWSClient निर्दिष्ट कस्टम फ़ोल्डर/सबफ़ोल्डर का URI लौटाता है, जिसका उपयोग फिर लक्ष्य फ़ोल्डर तक पहुंचने के लिए किया जा सकता है। नीचे दिए उदाहरण में, "TestInbox" नामक एक कस्टम फ़ोल्डर, जो INBOX के अंतर्गत बनाया गया है, तक पहुंची जाती है और इस कस्टम फ़ोल्डर से सभी संदेश प्रदर्शित किए जाते हैं। इस कार्य को करने के लिए, नीचे दिए चरण हैं:
- वैध क्रेडेंशियल्स प्रदान करके IEWSClient ऑब्जेक्ट को प्रारंभ करें।
- डिफ़ॉल्ट मेलबॉक्स तक पहुंचें।
- पैरेंट फ़ोल्डर तक पहुंचें, जो इस उदाहरण में INBOX है। यह पैरेंट फ़ोल्डर स्वयं एक कस्टम फ़ोल्डर भी हो सकता है।
- folderExists() का उपयोग करके निर्दिष्ट कस्टम सबफ़ोल्डर, जैसे "TestInbox" को खोजें। यह "TestInbox" का URI लौटाएगा।
- उस कस्टम फ़ोल्डर में सभी संदेशों तक पहुंचने के लिए इस URI का उपयोग करें।
निम्न कोड स्निपेट दिखाता है कि आप EWS के साथ मेलबॉक्स के कस्टम फ़ोल्डर या सबफ़ोल्डर तक कैसे पहुंच सकते हैं।
// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Create ExchangeMailboxInfo, ExchangeMessageInfoCollection instance
ExchangeMailboxInfo mailbox = client.getMailboxInfo();
ExchangeMessageInfoCollection messages = null;
ExchangeFolderInfo subfolderInfo = new ExchangeFolderInfo();
// Check if specified custom folder exisits and Get all the messages info from the target Uri
ExchangeFolderInfo[] referenceToSubfolderInfo = { subfolderInfo };
client.folderExists(mailbox.getInboxUri(), "TestInbox", /* out */ referenceToSubfolderInfo);
subfolderInfo = referenceToSubfolderInfo[0];
// if custom folder exists
if (subfolderInfo != null) {
messages = client.listMessages(subfolderInfo.getUri());
// Parse all the messages info collection
for (ExchangeMessageInfo info : (Iterable<ExchangeMessageInfo>) messages) {
String strMessageURI = info.getUniqueUri();
// now get the message details using FetchMessage()
MailMessage msg = client.fetchMessage(strMessageURI);
System.out.println("Subject: " + msg.getSubject());
}
} else {
System.out.println("No folder with this name found.");
}
सार्वजनिक फ़ोल्डरों की सूची बनाना
Microsoft Exchange Server उपयोगकर्ताओं को सार्वजनिक फ़ोल्डर बनाने और उनमें संदेश पोस्ट करने देता है। इसे अपने एप्लिकेशन के माध्यम से करने के लिए, Aspose.Email का उपयोग करें EWSClient क्लास जो एक्सचेंज सर्वर से कनेक्ट होती है और सार्वजनिक फ़ोल्डरों से संदेशों और पोस्टों को पढ़ती व डाउनलोड करती है। नीचे दिया गया कोड स्निपेट दिखाता है कि सभी सार्वजनिक फ़ोल्डरों, सबफ़ोल्डरों को पढ़ें, और इन फ़ोल्डरों में पाए गए किसी भी संदेश को सूचीबद्ध व डाउनलोड करें। यह उदाहरण केवल Microsoft Exchange Server 2007 या उसके बाद के संस्करणों के साथ काम करता है क्योंकि केवल वे EWS का समर्थन करते हैं।
public static void run() {
try {
readPublicFolders();
} catch (java.lang.RuntimeException ex) {
System.out.println(ex.getMessage());
}
}
private static void readPublicFolders() {
NetworkCredential credential = new NetworkCredential(username, password, domain);
IEWSClient client = EWSClient.getEWSClient(mailboxUri, credential);
ExchangeFolderInfoCollection folders = client.listPublicFolders();
for (ExchangeFolderInfo publicFolder : (Iterable<ExchangeFolderInfo>) folders) {
System.out.println("Name: " + publicFolder.getDisplayName());
System.out.println("Subfolders count: " + publicFolder.getChildFolderCount());
listMessagesFromSubFolder(publicFolder, client);
}
}
private static void listMessagesFromSubFolder(ExchangeFolderInfo publicFolder, IEWSClient client) {
System.out.println("Folder Name: " + publicFolder.getDisplayName());
ExchangeMessageInfoCollection msgInfoCollection = client.listMessagesFromPublicFolder(publicFolder);
for (ExchangeMessageInfo messageInfo : (Iterable<ExchangeMessageInfo>) msgInfoCollection) {
MailMessage msg = client.fetchMessage(messageInfo.getUniqueUri());
System.out.println(msg.getSubject());
msg.save(dataDir + msg.getSubject() + ".msg", SaveOptions.getDefaultMsgUnicode());
}
// Call this method recursively for any subfolders
if (publicFolder.getChildFolderCount() > 0) {
ExchangeFolderInfoCollection subfolders = client.listSubFolders(publicFolder);
for (ExchangeFolderInfo subfolder : (Iterable<ExchangeFolderInfo>) subfolders) {
listMessagesFromSubFolder(subfolder, client);
}
}
}
संदेश को दूसरे फ़ोल्डर में कॉपी करें
Aspose.Email API एक फ़ोल्डर से दूसरे फ़ोल्डर में संदेश कॉपी करने की अनुमति देता है, उपयोग करते हुए copyItem मेथड। इस मेथड का ओवरलोडेड संस्करण कॉपी किए गए संदेश का यूनिक URI लौटाता है जैसा कि इस लेख में दिखाया गया है।
try {
// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
MailMessage message = new MailMessage("from@domain.com", "to@domain.com", "EMAILNET-34997 - " + UUID.randomUUID().toString(),
"EMAILNET-34997 Exchange: Copy a message and get reference to the new Copy item");
String messageUri = client.appendMessage(message);
String newMessageUri = client.copyItem(messageUri, client.getMailboxInfo().getDeletedItemsUri());
} catch (java.lang.RuntimeException ex) {
System.out.println(ex.getMessage());
}
फ़ोल्डर आइटम्स का सिंक करना
Aspose.Email for Java API IEWSClient एक्सचेंज फ़ोल्डर की सामग्री को सिंक करने की सुविधा प्रदान करता है। यह syncFolder द्वारा प्रदर्शित मेथड IEWSClient क्लास का उपयोग निर्दिष्ट फ़ोल्डर पर फ़ोल्डर सिंक जानकारी करने के लिए किया जा सकता है। नीचे दिया गया कोड स्निपेट दिखाता है कि एक्सचेंज फ़ोल्डर जानकारी को कैसे सिंक किया जाए।
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
MailMessage message1 = new MailMessage("user@domain.com", "user@domain.com", "EMAILNET-34738 - " + UUID.randomUUID().toString(), "EMAILNET-34738 Sync Folder Items");
client.send(message1);
MailMessage message2 = new MailMessage("user@domain.com", "user@domain.com", "EMAILNET-34738 - " + UUID.randomUUID().toString(), "EMAILNET-34738 Sync Folder Items");
client.send(message2);
ExchangeMessageInfoCollection messageInfoCol = client.listMessages(client.getMailboxInfo().getInboxUri());
SyncFolderResult result = client.syncFolder(client.getMailboxInfo().getInboxUri(), null);
System.out.println(result.getNewItems().size());
System.out.println(result.getChangedItems().size());
System.out.println(result.getReadFlagChanged().size());
System.out.println(result.getDeletedItems().length);
एक्सचेंज फ़ोल्डरों के लिए अनुमतियों को प्राप्त करना
उपयोगकर्ताओं को एक्सचेंज सर्वर पर सार्वजनिक फ़ोल्डरों के लिए अनुमतियाँ दी जाती हैं, जो उपयोगकर्ता के इन फ़ोल्डरों तक पहुँच स्तर को सीमित/निर्धारित करती हैं। यह ExchangeFolderPermission क्लास एक्सचेंज फ़ोल्डरों के लिए, जैसे कि, अनुमति गुणों का एक सेट प्रदान करती है। PermissionLevel, चाहे वे कर सकें canCreateItems, deleteItems, और अनुमतियों के गुणों द्वारा निर्दिष्ट अन्य कार्य करें। अनुमतियों को निम्न का उपयोग करके प्राप्त किया जा सकता है getFolderPermissions() की विधि IEWSClient. यह लेख दिखाता है कि साझा फ़ोल्डरों तक पहुँच रखने वाले सभी उपयोगकर्ताओं के लिए सार्वजनिक फ़ोल्डर पर लागू अनुमतियों को कैसे प्राप्त किया जाए।
इस कार्य को करने के लिए:
- EWSClient को आरंभ करें।
- सभी सार्वजनिक फ़ोल्डर की सूची प्राप्त करने के लिए listPublicFolders का उपयोग करें
- getFolderPermissions() मेथड का उपयोग करके फ़ोल्डर से जुड़ी अनुमतियों को प्राप्त करें
निम्न कोड स्निपेट दिखाता है कि आप कैसे उपयोग करें EWSClient फ़ोल्डर पर लागू अनुमतियों को प्राप्त करने वाली क्लास।
String folderName = "DesiredFolderName";
// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
ExchangeFolderInfoCollection folders = client.listPublicFolders();
ExchangeFolderPermissionCollection permissions = new ExchangeFolderPermissionCollection();
ExchangeFolderInfo publicFolder = null;
try {
for (ExchangeFolderInfo folderInfo : (Iterable<ExchangeFolderInfo>) folders)
if (folderInfo.getDisplayName().equals(folderName))
publicFolder = folderInfo;
if (publicFolder == null)
System.out.println("public folder was not created in the root public folder");
ExchangePermissionCollection folderPermissionCol = client.getFolderPermissions(publicFolder.getUri());
for (ExchangeBasePermission perm : (Iterable<ExchangeBasePermission>) folderPermissionCol) {
if (perm instanceof ExchangeFolderPermission)
System.out.println("Permission is null.");
else {
ExchangeFolderPermission permission = (ExchangeFolderPermission) perm;
System.out.println("User's primary smtp address: " + permission.getUserInfo().getPrimarySmtpAddress());
System.out.println("User can create Items: " + permission.canCreateItems());
System.out.println("User can delete Items: " + permission.getDeleteItems());
System.out.println("Is Folder Visible: " + permission.isFolderVisible());
System.out.println("Is User owner of this folder: " + permission.isFolderOwner());
System.out.println("User can read items: " + permission.getReadItems());
}
}
ExchangeMailboxInfo mailboxInfo = client.getMailboxInfo();
// Get the Permissions for the Contacts and Calendar Folder
ExchangePermissionCollection contactsPermissionCol = client.getFolderPermissions(mailboxInfo.getContactsUri());
ExchangePermissionCollection calendarPermissionCol = client.getFolderPermissions(mailboxInfo.getCalendarUri());
} finally {
// Do the needfull
}
फ़ोल्डर और सब‑फ़ोल्डर बनाना
Aspose.Email API Exchange मेलबॉक्स में फ़ोल्डर्स बनाने की क्षमता प्रदान करता है। CreateFolder की विधि IEWSClient इसे इस उद्देश्य के लिए उपयोग किया जा सकता है। Exchange सर्वर मेलबॉक्स में फ़ोल्डर बनाने के लिए, निम्नलिखित चरण उपयोग किए जा सकते हैं।
- IEWSClient का एक इंस्टेंस बनाएं।
- आवश्यकतानुसार UseSlashAsFolderSeparator गुणधर्म सेट करें। यदि true पर सेट किया गया, तो एप्लिकेशन "Slash" को फ़ोल्डर विभाजक मानते हुए उप‑फ़ोल्डर को स्लैश के बाद बनाएगा।
- फ़ोल्डर बनाने के लिए createFolder मेथड का उपयोग करें।
निम्नलिखित कोड स्निपेट दिखाता है कि फ़ोल्डर्स और उप-फ़ोल्डर्स कैसे बनाए जाएँ।
// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
String inbox = client.getMailboxInfo().getInboxUri();
String folderName1 = "EMAILNET-35054";
String subFolderName0 = "2015";
String folderName2 = folderName1 + "/" + subFolderName0;
String folderName3 = folderName1 + " / 2015";
ExchangeFolderInfo rootFolderInfo = null;
ExchangeFolderInfo folderInfo = null;
try {
client.setUseSlashAsFolderSeparator(true);
client.createFolder(client.getMailboxInfo().getInboxUri(), folderName1);
client.createFolder(client.getMailboxInfo().getInboxUri(), folderName2);
} finally {
ExchangeFolderInfo[] referenceToRootFolderInfo = { rootFolderInfo };
boolean outRefCondition0 = client.folderExists(inbox, folderName1, /* out */ referenceToRootFolderInfo);
rootFolderInfo = referenceToRootFolderInfo[0];
if (outRefCondition0) {
ExchangeFolderInfo[] referenceToFolderInfo = { folderInfo };
boolean outRefCondition1 = client.folderExists(inbox, folderName2, /* out */ referenceToFolderInfo);
folderInfo = referenceToFolderInfo[0];
if (outRefCondition1)
client.deleteFolder(folderInfo.getUri(), true);
client.deleteFolder(rootFolderInfo.getUri(), true);
}
}
Exchange फ़ोल्डर्स को PST में बैकअप करें
अक्सर ऐसा होता है कि उपयोगकर्ता सभी या कुछ मेलबॉक्स फ़ोल्डर्स का बैकअप लेना चाहते हैं। Aspose.Email सभी या निर्दिष्ट Exchange मेलबॉक्स फ़ोल्डर्स को PST में बैकअप लेने की क्षमता प्रदान करता है। यह लेख Exchange फ़ोल्डर्स को PST में बैकअप लेने के बारे में नमूना कोड के साथ वर्णन करता है। Exchange सर्वर फ़ोल्डरों का बैकअप लेने के लिए निम्नलिखित चरणों का पालन किया जा सकता है।
- उपयोगकर्ता क्रेडेंशियल्स के साथ IEWSClient को प्रारंभ करें
- आवश्यक फ़ोल्डर की जानकारी को ExchangeFolderInfoCollection में जोड़ें
- फ़ोल्डर की सामग्री को PST में निर्यात करने के लिए क्लाइंट की बैकअप विधि का उपयोग करें
निम्नलिखित कोड स्निपेट दिखाता है कि Exchange फ़ोल्डर्स को PST में कैसे बैकअप किया जाए।
String dataDir = "data/";
// Create instance of IEWSClient class by providing credentials
final String mailboxUri = "https://ews.domain.com/ews/Exchange.asmx";
final String domain = "";
final String username = "username";
final String password = "password";
NetworkCredential credential = new NetworkCredential(username, password, domain);
IEWSClient client = EWSClient.getEWSClient(mailboxUri, credential);
// Get Exchange mailbox info of other email account
ExchangeMailboxInfo mailboxInfo = client.getMailboxInfo();
ExchangeFolderInfo info = client.getFolderInfo(mailboxInfo.getInboxUri());
ExchangeFolderInfoCollection fc = new ExchangeFolderInfoCollection();
fc.addItem(info);
client.backup(fc, dataDir + "Backup_out.pst", BackupOptions.None);