Exchange Server'da Klasörlerle Çalışma
Sunucudan Tüm Klasörlerin Listelenmesi
Aspose.Email API, Exchange Server’a bağlanma ve tüm klasörleri ve alt klasörleri listeleme yeteneği sağlar. Ayrıca her klasörden alt klasörleri yeniden döngüsel olarak alabilirsiniz. Exchange Web Service (EWS) kullanarak Exchange istemcisinden sayfalama ile klasörleri listeleme yeteneği de sunar. Bu makale, Exchange sunucusundan tüm alt klasörleri nasıl alacağınızı ve sayfalama ile klasörleri nasıl alacağınızı gösterir.
Aşağıdaki kod parçacığı, Exchange Server’dan klasörleri listelemenin nasıl yapılacağını gösterir.
// 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 ile Klasör Türü Bilgisi Alma
Bu FolderType tarafından sağlanan özellik ExchangeFolderInfo sınıf, klasör tipine ilişkin bilgi almak için kullanılabilir. Aşağıdaki kod örneğinde gösterildiği gibi.
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 ile Sayfalama Desteği Kullanarak Klasörleri Listeleme
Aşağıdaki kod örneği EWS kullanarak sayfalama desteğinin nasıl kullanılacağını gösterir.
// 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());
}
Posta Kutusu Özel Klasörlerine veya Alt Klasörlerine Erişim
IEWSClient geliştiricilerin posta kutusundan herhangi bir özel klasöre veya alt klasöre erişmesini sağlar. folderExists() fonksiyonu IEWSClient belirtilen bir özel klasör/alt klasörün URI’sini döndürür; bu URI daha sonra hedef klasöre erişmek için kullanılabilir. Aşağıdaki örnekte, INBOX altında oluşturulmuş "TestInbox" adlı özel klasöre erişilir ve bu klasörden tüm mesajlar gösterilir. Bu görevi gerçekleştirmek için aşağıdaki adımlar izlenir:
- Geçerli kimlik bilgileri sağlayarak IEWSClient nesnesini başlatın.
- Varsayılan posta kutusuna erişin.
- Bu örnekte üst klasöre, yani INBOX’a erişin. Bu üst klasör aynı zamanda bir özel klasör olabilir.
- Belirtilen özel alt klasörü aramak için folderExists() kullanın, örneğin "TestInbox". "TestInbox" URI’sini döndürecektir.
- Bu Uri’yi kullanarak o özel klasördeki tüm mesajlara erişin.
Aşağıdaki kod örneği, EWS kullanarak posta kutusu özel klasörlerine veya alt klasörlerine nasıl erişileceğini gösterir.
// 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.");
}
Ortak Klasörleri Listeleme
Microsoft Exchange Server, kullanıcılara ortak klasörler oluşturma ve içinde mesaj gönderme imkanı verir. Bunu uygulamanız üzerinden yapmak için Aspose.Email’in EWSClient Exchange Server’a bağlanmak ve ortak klasörlerden mesajları ve gönderileri okumak ve indirmek için sınıf. Aşağıdaki kod örneği, tüm ortak klasörleri ve alt klasörleri nasıl okuyacağınızı, bu klasörlerde bulunan mesajları listeleyip indireceğinizi gösterir. Bu örnek yalnızca Microsoft Exchange Server 2007 ve üzeri sürümlerde çalışır, çünkü yalnızca bunlar EWS’yi destekler.
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);
}
}
}
Bir Mesajı Başka Bir Klasöre Kopyala
Aspose.Email API, bir klasörden başka bir klasöre mesaj kopyalamayı şunu kullanarak sağlar: copyItem yöntem. Bu yöntemin aşırı yüklenmiş sürümü, bu makalede gösterildiği gibi kopyalanan mesajın benzersiz URI’sini döndürür.
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());
}
Klasör Öğelerini Eşitleme
Aspose.Email for Java API’ları IEWSClient Exchange klasörünün içeriği için eşitleme özelliğini sağlar. syncFolder tarafından sunulan yöntem IEWSClient sınıf, belirli bir klasörde klasör eşitleme bilgilerini gerçekleştirmek için kullanılabilir. Aşağıdaki kod örneği, Exchange klasör bilgilerini nasıl eşitleyeceğinizi gösterir.
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);
Exchange Klasörleri İçin İzinleri Alma
Kullanıcılara Exchange Server üzerindeki ortak klasörlerde izinler atanır; bu, bir kullanıcının bu klasörlere sahip olduğu erişim seviyesini sınırlar/belirler. ExchangeFolderPermission sınıf, Exchange klasörleri için aşağıdakiler gibi bir dizi izin özelliği sağlar PermissionLevel, onların yapıp yapamayacağını canCreateItems, deleteItems, ve izin özellikleriyle belirtilen diğer görevleri gerçekleştirin. İzinler şu kullanılarak alınabilir: getFolderPermissions() metodu IEWSClient. Bu makale, paylaşılan klasörlere erişimi olan tüm kullanıcılar için ortak bir klasöre uygulanan izinlerin nasıl alınacağını gösterir.
Bu görevi gerçekleştirmek için:
- EWSClient’ı başlatın.
- listPublicFolders’i kullanarak tüm ortak klasörlerin bir listesini alın
- getFolderPermissions() yöntemi kullanarak bir klasörle ilişkili izinleri alın
Aşağıdaki kod örneği size nasıl kullanılacağını gösterir EWSClient Bir klasöre uygulanan izinleri alacak sınıf.
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
}
Klasörler ve Alt Klasörler Oluşturma
Aspose.Email API, bir Exchange posta kutusunda klasör oluşturma yeteneği sağlar. CreateFolder metodu IEWSClient Bu amaçla kullanılabilir. Exchange sunucusundaki posta kutusunda bir klasör oluşturmak için aşağıdaki adımlar kullanılabilir.
- IEWSClient’ın bir örneğini oluşturun.
- UseSlashAsFolderSeparator özelliğini gerektiği gibi ayarlayın. true olarak ayarlanırsa, uygulama "Slash" karakterini klasör ayırıcı olarak kabul eder ve alt klasör slash’tan sonra oluşturulur.
- Klasörü oluşturmak için createFolder metodunu kullanın.
Aşağıdaki kod parçacığı klasörler ve alt klasörler oluşturmayı gösterir.
// 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 Klasörlerini PST’ye Yedekle
Kullanıcıların tüm veya bazı posta kutusu klasörlerinin yedeğini almak istemeleri sıkça görülür. Aspose.Email, tüm veya belirli Exchange posta kutusu klasörlerini bir PST’ye yedekleme yeteneği sağlar. Bu makale, örnek kod ile Exchange klasörlerini bir PST’ye yedeklemeyi açıklar. Exchange sunucusu klasörlerini yedeklemek için aşağıdaki adımlar izlenebilir.
- IEWSClient’ı kullanıcı kimlik bilgileriyle başlatın
- Gerekli klasör bilgisini ExchangeFolderInfoCollection’a ekleyin
- Klasör içeriğini PST’ye dışa aktarmak için istemcinin yedekleme yöntemini kullanın
Aşağıdaki kod parçacığı exchange klasörlerini PST’ye yedeklemeyi gösterir.
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);