Exchange Posta Kutusu ve Mesajlarıyla Çalışma - Java'da Exchange Sunucusundan E-posta Okuma
EWS Kullanarak Posta Kutusu Bilgisi Alma
Bu EWSClient sınıf, bir Exchange Server’dan mailbox bilgilerini almak için aşağıdaki çağrıyı yaparak kullanılabilecek üyelere sahiptir. IEWSClient.getMailboxInfo() metodu. Belirtilen tipte bir örnek döndürür. ExchangeMailboxInfo. Mailbox bilgilerini aşağıdaki gibi özelliklerden al. MailboxUri, InboxUri ve DraftsUri. Bu makale, Exchange Web Services kullanarak posta kutusu bilgisine nasıl erişileceğini gösterir.
Exchange Web Services (EWS) kullanarak Exchange Server’a bağlanmak istiyorsanız, EWSClient sınıf. Bu sınıf, bir Exchange Server’a bağlanmak ve öğeleri yönetmek için EWS kullanır. Aşağıdaki Java kod parçacığı, exchange web services kullanarak posta kutusu bilgisi almayı gösterir.
// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Get mailbox size, exchange mailbox info, Mailbox and Inbox folder URI
System.out.println("Mailbox size: " + client.getMailboxSize() + " bytes");
ExchangeMailboxInfo mailboxInfo = client.getMailboxInfo();
System.out.println("Mailbox URI: " + mailboxInfo.getMailboxUri());
System.out.println("Inbox folder URI: " + mailboxInfo.getInboxUri());
System.out.println("Sent Items URI: " + mailboxInfo.getSentItemsUri());
System.out.println("Drafts folder URI: " + mailboxInfo.getDraftsUri());
E-posta Mesajları Gönderme
Bir Exchange Server kullanarak e-posta mesajları gönderebilirsiniz, araçlar Aspose.Email.Exchange. IEWSClient.Send() metodu bir MailMessage örneği parametre olarak alır ve e-postayı gönderir. Bu makale, Exchange Web Services kullanarak e-posta mesajı göndermeyi açıklar.
Aspose.Email, Exchange Web Services kullanarak Microsoft Exchange Server’a bağlanmak için IEWSClient sınıfını sağlar. Aşağıdaki kod parçacığı, EWS’yi kullanarak Microsoft Exchange Server üzerinden e-posta göndermeyi gösterir. Aşağıdaki Java kod parçacığı, EWS kullanarak e-posta mesajları göndermeyi gösterir.
// Create instance of IEWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Create instance of type MailMessage
MailMessage msg = new MailMessage();
msg.setFrom(MailAddress.to_MailAddress("sender@domain.com"));
msg.setTo(MailAddressCollection.to_MailAddressCollection("recipient@ domain.com "));
msg.setSubject("Sending message from exchange server");
msg.setHtmlBody("<h3>sending message from exchange server</h3>");
// Send the message
client.send(msg);
Mesaj Sınıfını Alma
Bu getMessageClass() metodu ExchangeMessageInfo sınıf, mesaj için sınıfı temsil eden bir dize alır. Aşağıdaki kod örneği, mesaj sınıfını nasıl alacağınızı gösterir:
try (IEWSClient client = EWSClient.getEWSClient(uri, credentials))
{
ExchangeMessageInfoCollection messageInfoCollection = client.listMessagesFromPublicFolder(publicFolder);
for (ExchangeMessageInfo messageInfo : messageInfoCollection)
{
System.out.println("Message Class: " + messageInfo.getMessageClass());
}
}
Diğer Kullanıcının Posta Kutusundan E-posta Okuma
Exchange Sunucularındaki bazı hesapların birden fazla posta kutusuna erişim hakkı vardır ve bazı kullanıcıların aynı Exchange Sunucusunda birden fazla e-posta hesabı vardır. Her iki durumda da, kullanıcılar Aspose.Email for Java kullanarak diğer kullanıcıların posta kutularına erişebilir. Bu API, diğer posta kutularından klasör ve e-postalara erişim mekanizması sağlar IEWSClient sınıf. Bu işlevsellik, aşırı yüklenmiş getMailboxInfo() metodu ve kullanıcı e-posta adresini parametre olarak sağlamayı.
Aşağıdaki kod parçacığı, e-postaları okuma şeklinizi gösterir IEWSClient sınıf.
// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Get Exchange mailbox info of other email account
ExchangeMailboxInfo mailboxInfo = client.getMailboxInfo("otherUser@domain.com");
Mesaj Listeleme
Bir Exchange posta kutusundaki e-posta mesajlarının listesi, aşağıdaki çağrıyı yaparak alınabilir: IEWSClient.listMessages metodu. Mesajların temel bilgilerini, örneğin konu, gönderen, alıcı ve mesaj ID’sini, kullanarak alır. listMessages metod.
Basit Mesaj Listeleme
Bir Exchange posta kutusundaki mesajları listelemek için:
- Şunun bir örneğini oluştur IEWSClient sınıf.
- listMessages metodunu çağırın ve bir mesaj koleksiyonu oluşturun.
- Koleksiyon üzerinde döngü kurup mesaj bilgilerini göster.
Aşağıdaki Java kod parçacığı, EWS kullanarak bir exchange sunucusuna bağlanıp gelen kutusundaki mesajları listelemeyi 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());
// Loop through the collection to display the basic information
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
System.out.println("Subject: " + msgInfo.getSubject());
System.out.println("From: " + msgInfo.getFrom().toString());
System.out.println("To: " + msgInfo.getTo().toString());
System.out.println("Message ID: " + msgInfo.getMessageId());
System.out.println("Unique URI: " + msgInfo.getUniqueUri());
}
Farklı Klasörlerden Mesaj Listeleme
Yukarıdaki kod parçacıkları, Gelen Kutusu klasöründeki tüm mesajları listeleyin. Diğer klasörlerden de mesaj listesi almak mümkündür. IEWSClient.listMessages() metod, bir klasör URI’sini parametre olarak kabul eder. Klasör URI’si geçerli olduğu sürece, o klasörden mesaj listesini alabilirsiniz. Farklı klasörlerin URI’sini almak için IEWSClient.getMailboxInfo().getXXXFolderUri özelliğini kullanın. Kalan kod, mesaj listesini almakla aynı. Aşağıdaki kod parçacığı, EWS kullanarak farklı klasörlerden mesajları listelemeyi gösterir.
// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Get folder URI
String strFolderURI = "";
strFolderURI = client.getMailboxInfo().getInboxUri();
strFolderURI = client.getMailboxInfo().getDeletedItemsUri();
strFolderURI = client.getMailboxInfo().getDraftsUri();
strFolderURI = client.getMailboxInfo().getSentItemsUri();
// Get list of messages from the specified folder
ExchangeMessageInfoCollection msgCollection = client.listMessages(strFolderURI);
Sayfalama Desteğiyle Mesaj Listeleme
Aşağıdaki Java kod parçacığı, sayfalama desteğiyle mesaj listesi almayı gösterir.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
final IEWSClient client = EWSClient.getEWSClient("exchange.domain.com", "username", "password");
try {
try {
// Create some test messages to be added to server for retrieval later
int messagesNum = 12;
int itemsPerPage = 5;
MailMessage message = null;
for (int i = 0; i < messagesNum; i++) {
message = new MailMessage("from@domain.com", "to@domain.com", "EMAILNET-35157_1 - " + UUID.randomUUID().toString(),
"EMAILNET-35157 Move paging parameters to separate class");
client.appendMessage(client.getMailboxInfo().getInboxUri(), message);
}
// Verfiy that the messages have been added to the server
ExchangeMessageInfoCollection totalMessageInfoCol = client.listMessages(client.getMailboxInfo().getInboxUri());
System.out.println(totalMessageInfoCol.size());
////////////////// RETREIVING THE MESSAGES USING PAGING SUPPORT ////////////////////////////////////
List<ExchangeMessagePageInfo> pages = new ArrayList<ExchangeMessagePageInfo>();
ExchangeMessagePageInfo pageInfo = client.listMessagesByPage(client.getMailboxInfo().getInboxUri(), itemsPerPage);
// Total Pages Count
System.out.println(pageInfo.getTotalCount());
pages.add(pageInfo);
while (!pageInfo.getLastPage()) {
pageInfo = client.listMessagesByPage(client.getMailboxInfo().getInboxUri(), itemsPerPage, pageInfo.getPageOffset() + 1);
pages.add(pageInfo);
}
int retrievedItems = 0;
// foreach to while statements conversion
for (ExchangeMessagePageInfo pageCol : pages) {
retrievedItems += pageCol.getItems().size();
}
// Verify total message count using paging
System.out.println(retrievedItems);
} finally {
}
} finally {
client.dispose();
}
ExchangeMessageInfo’dan Mesaj Türü Bilgisi Alma
IEWSClient client = EWSClient.getEWSClient(mailboxUri, credentials);
ExchangeMessageInfoCollection list = client.listMessages(client.getMailboxInfo().getDeletedItemsUri());
System.out.println(list.get_Item(0).getMessageInfoType()); // MessageInfoType
Mesajları Kaydetme
Bu makale, Exchange Server posta kutusundan mesajları alıp diske EML ve MSG formatlarında nasıl kaydedeceğinizi gösterir:
- DISK üzerinde EML olarak kaydet.
- Bellek akışına kaydet.
- MSG olarak kaydet.
Mesajları EML’ye Kaydetme
Mesajları alıp EML formatında kaydetmek için:
- IEWSClient sınıfının bir örneğini oluşturun.
- mailboxUri, kullanıcı adı, şifre ve domain’i sağlayın.
- IEWSClient.listMessages() metodunu çağırarak ExchangeMessagesInfoCollection koleksiyonunun bir örneğini alın.
- ExchangeMessagesInfoCollection koleksiyonunda döngü yaparak her mesaj için benzersiz URI’yi alın.
- IEWSClient.saveMessage() metodunu çağırın ve benzersiz URI’yi parametre olarak geçin.
- saveMessage() metoduna dosyayı kaydetmek istediğiniz yolu sağlayın.
Aşağıdaki kod parçacığı, EWS’yi kullanarak Exchange Server’a bağlanıp mesajları EML dosyaları olarak nasıl kaydedeceğinizi gösterir.
// Create instance of IEWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());
// Loop through the collection to get Message URI
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
String strMessageURI = msgInfo.getUniqueUri();
// Now save the message in disk
client.saveMessage(strMessageURI, dataDir + msgInfo.getMessageId() + "out.eml");
}
Mesajları Bellek Akışına Kaydetme
EML dosyalarını diske kaydetmek yerine, bellek akışına kaydetmek mümkündür. Bu, akışı bir veritabanı gibi bir depolama konumuna kaydetmek istediğinizde kullanışlıdır. Akış bir veritabanına kaydedildikten sonra, EML dosyasını MailMessage sınıf. Aşağıdaki kod parçacığı, EWS kullanarak bir Exchange Server posta kutusundan mesajları bellek akışına nasıl kaydedeceğinizi gösterir.
// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());
// Loop through the collection to get Message URI
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
String strMessageURI = msgInfo.getUniqueUri();
// Now save the message in memory stream
ByteArrayOutputStream stream = new ByteArrayOutputStream();
client.saveMessage(strMessageURI, stream);
}
Mesajları MSG Formatında Kaydetme
Bu IEWSClient.saveMessage() metod, mesajı doğrudan EML formatına kaydedebilir. Mesajları MSG formatına kaydetmek için önce IEWSClient.fetchMessage() örnek bir nesne döndüren metod MailMessage sınıf. Ardından çağırın MailMessage.save() MSG’ye kaydetmek için metod. Aşağıdaki kod parçacığı, Exchange Server posta kutusundan mesajları alıp EWS kullanarak MSG formatında nasıl kaydedeceğinizi gösterir.
// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());
int count = 0;
// Loop through the collection to get Message URI
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
String strMessageURI = msgInfo.getUniqueUri();
// Now get the message details using FetchMessage() and Save message as Msg
MailMessage message = client.fetchMessage(strMessageURI);
message.save(dataDir + (count++) + "_out.msg", SaveOptions.getDefaultMsgUnicode());
}
Mesaj URI’sinden ExchangeMessageInfo Alma
Bir e-posta mesajı, benzersiz kimliği, URI’siyle temsil edilir ve ExchangeMessageInfo nesne. Sadece mesaj URI’si mevcutsa, o zaman ExchangeMessageInfo nesne, bu mevcut bilgi kullanılarak da alınabilir. Aşırı yükleme sürümü listMessages kullanmak için bir Id listesi alır ExchangeMessageInfoCollection. Aşağıdaki kod parçacığı, nasıl alacağınızı gösterir ExchangeMessageInfo mesaj URI’sinden.
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "user@domain.com", "pwd", "domain");
List<String> ids = new ArrayList<String>();
List<MailMessage> messages = new ArrayList<MailMessage>();
for (int i = 0; i < 5; i++) {
MailMessage message = new MailMessage("user@domain.com", "receiver@domain.com", "EMAILNET-35033 - " + UUID.randomUUID().toString(),
"EMAILNET-35033 Messages saved from Sent Items folder doesn't contain 'To' field");
messages.add(message);
String uri = client.appendMessage(message);
ids.add(uri);
}
ExchangeMessageInfoCollection messageInfoCol = client.listMessages(ids);
for (ExchangeMessageInfo messageInfo : (Iterable<ExchangeMessageInfo>) messageInfoCol) {
// Do something ...
System.out.println(messageInfo.getUniqueUri());
}
Exchange Server posta kutusundan mesajları getir
Exchange Server’da Mesajları Listeleme şunu kullandı: listMessages() yöntem, bir Exchange Server posta kutusundan mesaj listesi alır. listMessages() metod, örneğin konu, mesaj ID’si, gönderen ve alıcı gibi mesajların temel bilgilerini alır. Tam mesaj detaylarını elde etmek için, Aspose.Email.Exchange IEWSClient.fetchMessage() metodunu sağlar. Bu metod, mesaj URI’sini parametre olarak alır ve bir örnek döndürür MailMessage sınıf. MailMessage sınıf, ardından gövde, başlıklar ve ekler gibi mesaj detaylarını sağlar. Daha fazlasını öğrenin MailMessage API, veya e-postaları yönetmenin nasıl olduğunu öğrenin MailMessage sınıf. Exchange Server posta kutusundan mesajları çekmek için:
- IEWSClient tipinde bir örnek oluşturun.
- Sunucu adını, kullanıcı adını, şifreyi ve domaine belirtin.
- ExchangeMessageInfoCollection’ı almak için listMessages’ı çağırın.
- ExchangeMessageInfoCollection koleksiyonunda döngü yaparak ExchangeMessageInfo.UniqueURI değerlerini alın.
- IEWSClient.fetchMessage() yöntemini çağırın ve ExchangeMessageInfo.UniqueURI’yi parametre olarak geçirin.
Aşağıdaki kod parçacığı, Exchange Sunucusu posta kutusuna bağlanmanızı ve EWS kullanarak tüm mesajları almanızı gösterir.
// Create instance of ExchangeWebServiceClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());
// Loop through the collection to get Message URI
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
String strMessageURI = msgInfo.getUniqueUri();
// Now get the message details using FetchMessage()
MailMessage msg = client.fetchMessage(strMessageURI);
for (Attachment att : (Iterable<Attachment>) msg.getAttachments()) {
System.out.println("Attachment Name: " + att.getName());
}
}
FetchItem yöntemiyle bir mesaj çekme
Bu FetchItem bir şeyi almak istiyorsanız metod daha çok tercih edilir MapiMessage ve MAPI özellikleriyle çalışır. Bu yöntemi ayrıca bir kişi, randevu, görev gibi herhangi bir Outlook öğesini almak için de kullanabilirsiniz.
// Create instance of ExchangeWebServiceClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());
// Loop through the collection to get Message URI
for (ExchangeMessageInfo msgInfo : msgCollection)
{
// Now get the message using FetchItem()
MapiMessage msg = client.fetchItem(msgInfo.getUniqueUri());
// If necessary, you can cast the MapiMessage to the proper item type to simplify working with its properties.
MapiContact contact = (MapiContact) msg.toMapiMessageItem();
}
Mesaj Boyutunu Önceden Al
Microsoft Outlook InterOp, mesajı sunucudan tamamen almadan önce mesaj boyutunu almayı sağlar. Aspose.Email API durumunda, Exchange sunucusundan alınan özet bilgi TextFormat sayıcı tarafından tanımlanan bir tip olarak temsil edilir. ExchangeMessageInfo class. Mesaj boyutunu Size özelliğiyle almayı sağlayan aynı özelliği sunar. Mesaj boyutunu almak için, IEWSClient’ın listMessages metoduna yapılan standart çağrı, bir koleksiyon alır. ExchangeMessageInfo. Aşağıdaki kod parçacığı, mesaj boyutunu şu şekilde görüntülemeyi gösterir ExchangeMessageInfo sınıf.
// Create instance of ExchangeWebServiceClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());
// Loop through the collection to display the basic information
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
System.out.println("Subject: " + msgInfo.getSubject());
System.out.println("From: " + msgInfo.getFrom().toString());
System.out.println("To: " + msgInfo.getTo().toString());
System.out.println("Message Size: " + msgInfo.getSize());
System.out.println("==================================");
}
Mesajları Döngüsel İndirme
Bu EWSClient’s listSubFolders() metod, bir Exchange Server posta kutusundaki klasör ve alt klasörlerden mesajları döngüsel olarak almak için kullanılabilir. Bu, EWS kullandığı için Exchange Server 2007 veya daha yeni bir sürümünü gerektirir. Aşağıdaki kod parçacığı, bir Exchange Server’ın tüm posta kutusunu (klasörler ve alt klasörler) nasıl indireceğinizi gösterir. Klasör yapısı yerel olarak oluşturulur ve tüm mesajlar indirilir.
public static void run() {
try {
downloadAllMessages();
} catch (java.lang.RuntimeException ex) {
System.out.println(ex.getMessage());
}
}
private static void downloadAllMessages() {
try {
String rootFolder = domain + "-" + username;
new File(rootFolder).mkdirs();
String inboxFolder = rootFolder + "\\Inbox";
new File(inboxFolder).mkdirs();
System.out.println("Downloading all messages from Inbox....");
// Create instance of IEWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", username, password, domain);
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
listMessagesInFolder(client, folderInfo, rootFolder);
}
System.out.println("All messages downloaded.");
} catch (java.lang.RuntimeException ex) {
System.out.println(ex.getMessage());
}
}
// Recursive method to get messages from folders and sub-folders
private static void listMessagesInFolder(IEWSClient client, ExchangeFolderInfo folderInfo, String rootFolder) {
// Create the folder in disk (same name as on IMAP server)
String currentFolder = rootFolder + "\\" + folderInfo.getDisplayName();
new File(currentFolder).mkdirs();
// List messages
ExchangeMessageInfoCollection msgInfoColl = client.listMessages(folderInfo.getUri());
System.out.println("Listing messages....");
int i = 0;
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgInfoColl) {
// Get subject and other properties of the message
System.out.println("Subject: " + msgInfo.getSubject());
// Get rid of characters like ? and :, which should not be included in a file name
String fileName = msgInfo.getSubject().replace("?", " ").replace(":", " ");
MailMessage msg = client.fetchMessage(msgInfo.getUniqueUri());
msg.save(dataDir + "\\" + fileName + "-" + i + ".msg");
i++;
}
System.out.println("============================\n");
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) {
listMessagesInFolder(client, subfolderInfo, currentFolder);
}
} catch (java.lang.RuntimeException e) {
}
}
Public Klasörlerden Mesaj İndirme
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 public klasörlerden mesajları ve gönderileri okumak ve indirmek için Exchange Sunucusuna bağlanan sınıf. Aşağıdaki kod parçacığı, tüm public klasörleri ve alt klasörleri nasıl okuduğunuzu, bu klasörlerde bulunan mesajları nasıl listelediğinizi ve indirdiğinizi gösterir. Bu örnek yalnızca Microsoft Exchange Server 2007 ve üzeri sürümlerle çalışır, çünkü sadece bu sürümler 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);
}
}
}
Mesaj Taşıma
Bir klasörden diğerine e-posta mesajlarını aşağıdakinin yardımıyla taşıyabilirsiniz: IEWSClient sınıf taşı metodu. Parametreleri alır:
- Taşınacak mesajın benzersiz URI’si.
- Hedef klasörün benzersiz URI’si.
Klasörler Arasında Mesaj Taşıma
Aşağıdaki kod parçacığı, bir posta kutusundaki mesajı Gelen Kutusu klasöründen İşlenmiş adlı klasöre nasıl taşıyacağınızı gösterir. Bu örnekte, uygulama:
- Gelen Kutusu klasöründen mesajları okur.
- Bazı mesajları belirli bir kritere göre işler (bu örnekte, mesaj konusundaki bir anahtar kelimeyi buluruz).
- Belirtilen koşulu sağlayan mesajları işlenen klasöre taşır.
// Create instance of IEWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
ExchangeMailboxInfo mailboxInfo = client.getMailboxInfo();
// List all messages from Inbox folder
System.out.println("Listing all messages from Inbox....");
ExchangeMessageInfoCollection msgInfoColl = client.listMessages(mailboxInfo.getInboxUri());
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgInfoColl) {
// Move message to "Processed" folder, after processing certain messages based on some criteria
if (msgInfo.getSubject() != null && msgInfo.getSubject().toLowerCase().contains("process this message")) {
client.moveItem(mailboxInfo.getDeletedItemsUri(), msgInfo.getUniqueUri()); // EWS
System.out.println("Message moved...." + msgInfo.getSubject());
} else {
// Do something else
}
}
Mesajları Silme
Bir klasörden e-posta mesajlarını, aşağıdakinin yardımıyla silebilirsiniz IEWSClient sınıf deleteItem metod. Mesajın benzersiz URI’sını parametre olarak alır.
Aşağıdaki kod parçacığı, Gelen Kutusu klasöründen bir mesajı nasıl sileceğinizi gösterir. Bu örnek için kod:
- Gelen Kutusu klasöründen mesajları okur.
- Mesajları belirli bir kritere göre işleyin (bu örnekte, mesaj konusundaki bir anahtar kelimeyi buluyoruz).
- Mesajı siler.
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
ExchangeMailboxInfo mailboxInfo = client.getMailboxInfo();
// List all messages from Inbox folder
System.out.println("Listing all messages from Inbox....");
ExchangeMessageInfoCollection msgInfoColl = client.listMessages(mailboxInfo.getInboxUri());
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgInfoColl) {
// Delete message based on some criteria
if (msgInfo.getSubject() != null && msgInfo.getSubject().toLowerCase().contains("delete") == true) {
client.deleteItem(msgInfo.getUniqueUri(), DeletionOptions.getDeletePermanently()); // EWS
System.out.println("Message deleted...." + msgInfo.getSubject());
} else {
// Do something else
}
}
Mesajları Kopyalama
Aspose.Email API, bir klasörden başka bir klasöre mesaj kopyalamayı 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.
Bir Mesajı Başka Klasöre Kopyalama
Aşağıdaki kod parçacığı, bir mesajı başka bir klasöre nasıl kopyalayacağınızı gösterir.
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());
}