Arbeta med mappar på Exchange Server
Lista alla mappar från servern
Aspose.Email API ger möjlighet att ansluta till Exchange Server och lista alla mappar och undermappar. Du kan också hämta alla undermappar från varje mapp rekursivt. Den ger också möjlighet att lista mappar med sidstöd från Exchange‑klienten med Exchange Web Service (EWS). Den här artikeln visar hur du hämtar alla undermappar från Exchange‑servern och listar mappar med paginering.
Följande kodsnutt visar hur du listar mappar från Exchange‑server.
// 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) {
}
}
Hämta information om mapptyp med EWS
Den FolderType egenskap tillhandahållen av ExchangeFolderInfo klass kan användas för att få information om mappens typ. Detta visas i kodexemplet nedan.
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;
}
}
Lista mappar med sidstöd med hjälp av EWS
Följande kodsnutt visar hur du använder sidstöd med 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());
}
Åtkomst till anpassade mappar eller undermappar i brevlådan
IEWSClient låter utvecklare få åtkomst till alla anpassade mappar eller undermappar i brevlådan. folderExists() funktion av IEWSClient returnerar URI:n för en specificerad anpassad mapp/undermapp, som sedan kan användas för att nå mål‑mappen. I följande exempel öppnas en anpassad mapp med namnet "TestInbox", som är skapad under INBOX, och alla meddelanden visas från denna anpassade mapp. För att utföra denna uppgift följer stegen:
- Initiera IEWSClient‑objektet genom att ange giltiga autentiseringsuppgifter.
- Öppna standardbrevlådan.
- Öppna föräldramappen, som i detta exempel är INBOX. Denna föräldramapp kan också vara en anpassad mapp.
- Använd folderExists() för att söka i den angivna anpassade undermappen, t.ex. "TestInbox". Den kommer att returnera URI:n för "TestInbox".
- Använd denna URI för att komma åt alla meddelanden i den anpassade mappen.
Följande kodsnutt visar hur du får åtkomst till anpassade mappar eller undermappar i brevlådan med 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.");
}
Lista offentliga mappar
Microsoft Exchange Server låter användare skapa offentliga mappar och posta meddelanden i dem. För att göra detta via din applikation, använd Aspose.Email:s EWSClient klass för att ansluta till Exchange Server och läsa samt ladda ner meddelanden och inlägg från offentliga mappar. Följande kodsnutt visar hur du läser alla offentliga mappar och undermappar, listar och laddar ner alla meddelanden som finns i dessa mappar. Detta exempel fungerar endast med Microsoft Exchange Server 2007 eller senare, eftersom endast dessa stödjer 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);
}
}
}
Kopiera ett meddelande till en annan mapp
Aspose.Email API möjliggör kopiering av ett meddelande från en mapp till en annan mapp med hjälp av copyItem metod. Den överlagrade versionen av denna metod returnerar den unika URI:n för det kopierade meddelandet som visas i den här artikeln.
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());
}
Synkronisera mappelement
Aspose.Email för Java API:er IEWSClient tillhandahåller funktionen att synkronisera en Exchange‑mapp för dess innehåll. syncFolder metod som exponeras av IEWSClient klass kan användas för att utföra mapp‑synkroniseringsinformation på en angiven mapp. Följande kodsnutt visar hur du synkroniserar Exchange‑mappinformation.
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);
Hämta behörigheter för Exchange‑mappar
Användare tilldelas behörigheter till offentliga mappar på Exchange Server, vilket begränsar/bestämmar användarens åtkomstnivå till dessa mappar. ExchangeFolderPermission klass tillhandahåller en uppsättning behörighetsegenskaper för Exchange‑mappar såsom PermissionLevel, om de kan canCreateItems, deleteItems, och utföra andra uppgifter enligt permission‑egenskaperna. Behörigheter kan hämtas med hjälp av getFolderPermissions() metod för IEWSClient. Den här artikeln visar hur du hämtar behörigheterna som tillämpas på en offentlig mapp för alla användare som har åtkomst till de delade mapparna.
För att utföra detta:
- Initiera EWSClient.
- Använd listPublicFolders för att få en lista över alla offentliga mappar
- Hämta behörigheterna som är kopplade till en mapp med hjälp av metoden getFolderPermissions()
Följande kodsnutt visar hur du använder EWSClient klass för att hämta behörigheter som tillämpas på en mapp.
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
}
Skapa mappar och undermappar
Aspose.Email API erbjuder möjligheten att skapa mappar i en Exchange‑postlåda. CreateFolder metod för IEWSClient kan användas för detta ändamål. För att skapa en mapp i Exchange‑serverns postlåda kan följande steg användas.
- Skapa en instans av IEWSClient.
- Ställ in egenskapen UseSlashAsFolderSeparator efter behov. Om den sätts till true kommer applikationen att betrakta "Slash" som mappskiljetecken och undermappen skapas efter snedstrecket.
- Använd createFolder‑metoden för att skapa mappen.
Följande kodsnutt visar hur du skapar mappar och undermappar.
// 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);
}
}
Säkerhetskopiera Exchange‑mappar till PST
Det händer ofta att användare vill ta en backup av alla eller några av postlådemapparna. Aspose.Email erbjuder möjligheten att säkerhetskopiera alla eller utvalda Exchange‑postlådemappar till en PST. Den här artikeln beskriver hur man tar backup av Exchange‑mappar till en PST med exempelkod. För att säkerhetskopiera Exchange‑server‑mappar kan följande steg följas.
- Initiera IEWSClient med användaruppgifter
- Lägg till den nödvändiga mappinformationen till ExchangeFolderInfoCollection
- Använd klientens backup‑metod för att exportera mappens innehåll till PST
Följande kodsnutt visar hur du säkerhetskopierar Exchange‑mappar till 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);