Работа с Exchange поща и съобщения - Четене на имейл от Exchange сървър в Java
Получаване на информация за пощенска кутия чрез EWS
Този EWSClient класът има членове, които могат да се използват за получаване на информация за кутия от Exchange Server чрез извикване на IEWSClient.getMailboxInfo() метод. Той връща екземпляр от тип ExchangeMailboxInfo. Получете информация за кутията от свойства като MailboxUri, InboxUri и DraftsUri. Тази статия показва как да достъпите информация за пощенска кутия чрез Exchange Web Services.
Ако искате да се свържете с Exchange сървъра, използвайки Exchange Web Services (EWS), използвайте EWSClient клас. Този клас използва EWS за свързване и управление на елементи в Exchange сървър. Следният Java кодов откъс показва как да получите информация за пощенската кутия, използвайки web services.
// 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());
Изпращане на имейл съобщения
Можете да изпращате имейл съобщения, използвайки Exchange Server с помощта на инструментите в Aspose.Email.Exchange. Методът IEWSClient.Send() приема MailMessage инстанция като параметър и изпраща имейла. Тази статия обяснява как да изпращате имейл съобщения, използвайки Exchange Web Services.
Aspose.Email предоставя класа IEWSClient за свързване към Microsoft Exchange Server чрез Exchange Web Services. Следният кодов откъс показва как се използва EWS за изпращане на имейли чрез Microsoft Exchange Server. Следният Java кодов откъс показва как се изпращат имейл съобщения, използвайки EWS.
// 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);
Получаване на клас на съобщението
Този getMessageClass() метод на ExchangeMessageInfo класът получава низ, представляващ класа за съобщението. Примерният код по-долу показва как да получите класа на съобщението:
try (IEWSClient client = EWSClient.getEWSClient(uri, credentials))
{
ExchangeMessageInfoCollection messageInfoCollection = client.listMessagesFromPublicFolder(publicFolder);
for (ExchangeMessageInfo messageInfo : messageInfoCollection)
{
System.out.println("Message Class: " + messageInfo.getMessageClass());
}
}
Четене на имейли от пощенската кутия на друг потребител
Някои акаунти в Exchange сървъри имат право да достъпват множество пощенски кутии, а някои потребители имат няколко имейл акаунта в един и същи Exchange сървър. В двата случая потребителите могат да достъпват пощенски кутии на други потребители, използвайки Aspose.Email за Java. Това API предоставя механизъм за достъп до папки и имейли от други пощенски кутии, използвайки IEWSClient клас. Тази функционалност може да бъде постигната чрез претоварения getMailboxInfo() метод и предоставяйки имейл адреса на потребителя като параметър.
Следният кодов откъс показва как да четете имейли, използвайки IEWSClient клас.
// 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");
Изброяване на съобщения
Списък със съобщенията в кутия на Exchange може да се получи чрез извикване на IEWClient.listMessages метод. Получете основната информация за съобщенията, като тема, от, до и ID на съобщението, чрез listMessages метод.
Просто изброяване на съобщения
За изброяване на съобщенията в Exchange пощенска кутия:
- Създайте инстанция на IEWSClient клас.
- Извикайте метода listMessages и създайте колекция от съобщения.
- Обхождайте колекцията и показвайте информация за съобщението.
Следният Java кодов откъс показва как се свързвате с exchange сървър, използвайки EWS, и изброявате съобщения от папка Inbox.
// 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());
}
Изброяване на съобщения от различни папки
Горните кодови откъси, изброява всички съобщения в папка Inbox. Възможно е също да се получи списък със съобщения от други папки. The IEWSClient.listMessages() методът приема URI на папка като параметър. Докато URI‑то на папката е валидно, можете да получите списъка със съобщения от тази папка. Използвайте свойството IEWSClient.getMailboxInfo().getXXXFolderUri, за да получите URI‑то на различните папки. Останалата част от кода е същата като при получаването на списък със съобщения. Следният кодов откъс показва как да изброявате съобщения от различни папки, използвайки EWS.
// 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);
Изброяване на съобщения с поддръжка на странициране
Следният Java кодов откъс показва как да получите списък със съобщения с поддръжка на странициране.
// 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
IEWSClient client = EWSClient.getEWSClient(mailboxUri, credentials);
ExchangeMessageInfoCollection list = client.listMessages(client.getMailboxInfo().getDeletedItemsUri());
System.out.println(list.get_Item(0).getMessageInfoType()); // MessageInfoType
Запазване на съобщения
Тази статия показва как да получите съобщения от пощенска кутия на Exchange сървър и да ги запишете на диск във формати EML и MSG:
- Запис като EML на диск.
- Запис в паметен поток.
- Запис като MSG.
Запазване на съобщения в EML
За получаване на съобщения и запазване във формат EML:
- Създайте инстанция от класа IEWSClient.
- Посочете mailboxUri, потребителско име, парола и домейн.
- Извикайте метода IEWSClient.listMessages(), за да получите инстанция на колекцията ExchangeMessagesInfoCollection.
- Обхождайте колекцията ExchangeMessagesInfoCollection, за да получите уникалния URI за всяко съобщение.
- Извикайте метода IEWSClient.saveMessage() и предайте уникалния URI като параметър.
- Предоставете на метода saveMessage() път, където искате да запазите файла.
Следният кодов откъс показва как да използвате EWS за свързване към Exchange сървъра и запазване на съобщенията като EML файлове.
// 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");
}
Запазване на съобщения в паметен поток
Вместо да запазвате EML файловете на диск, е възможно да ги запишете в паметен поток. Това е полезно, когато искате да съхраните потока в хранилище като база данни. След като потокът е запазен в база данни, можете да заредите EML файла обратно в MailMessage клас. Следният кодов откъс показва как да запишете съобщения от пощенска кутия на Exchange сървър в паметен поток, използвайки EWS.
// 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);
}
Запазване на съобщения във формат MSG
Този IEWSClient.saveMessage() методът може директно да запази съобщението във формат EML. За запазване в MSG формат, първо извикайте IEWSClient.fetchMessage() метод, който връща екземпляр на MailMessage клас. След това извикайте MailMessage.save() метод за запазване на съобщението във формат MSG. Следният кодов откъс показва как да се получат съобщения от пощенска кутия на Exchange сървър и да се запишат във формат MSG, използвайки EWS.
// 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());
}
Получаване на ExchangeMessageInfo от URI на съобщението
Имейл съобщението се представя чрез уникалния си идентификатор, URI, и е неразделна част от ExchangeMessageInfo обект. В случай, че е наличен само URI на съобщението, тогава ExchangeMessageInfo обектът може също да бъде извлечен с тази налична информация. Претоварената версия на listMessages приема списък от ID за използване ExchangeMessageInfoCollection. Следният кодов откъс показва как да се получи ExchangeMessageInfo от URI на съобщението.
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
Изброяването на съобщения в Exchange Server използва listMessages() метод за получаване на списък със съобщения от пощенска кутия в Exchange Server. Този listMessages() методът получава основна информация за съобщенията, например тема, ID на съобщението, от и до. За пълните детайли на съобщението, Aspose.Email.Exchange предоставя метода IEWSClient.fetchMessage(). Този метод приема URI на съобщението като параметър и връща инстанция на MailMessage клас. Този MailMessage класът след това предоставя детайли за съобщението като тяло, заглавки и прикачени файлове. Научете повече за MailMessage API, или открийте как да управлявате имейли с MailMessage клас. За извличане на съобщения от пощенската кутия на Exchange сървъра:
- Създайте инстанция от тип IEWSClient.
- Посочете името на сървъра, потребителското име, паролата и домейна.
- Извикайте listMessages, за да получите ExchangeMessageInfoCollection.
- Обхождайте колекцията ExchangeMessageInfoCollection, за да получите стойностите на ExchangeMessageInfo.UniqueURI.
- Извикайте IEWSClient.fetchMessage() и предайте ExchangeMessageInfo.UniqueURI като параметър.
Следният кодов откъс показва как да се свържете с пощенската кутия на Exchange сървъра и да извлечете всички съобщения, използвайки EWS.
// 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 за извличане на съобщение
Този FetchItem метод е предпочитан, ако искате да извлечете MapiMessage и оперира със свойства MAPI. Можете също така да използвате този метод за извличане на всеки Outlook елемент, като контакт, среща, задача и др.
// 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();
}
Предварително извличане на размера на съобщението
Microsoft Outlook InterOp предоставя функция за извличане на размера на съобщението преди действително да се изтегли цялото съобщение от сървъра. При Aspose.Email API, обобщената информация, получена от Exchange сървъра, е представена от ExchangeMessageInfo клас. Той предоставя същата функция за извличане на размера на съобщението, използвайки свойството Size. За да се извлече размерът на съобщението, се използва стандартното извикване към listMessages на IEWSClient, което извлича колекция от ExchangeMessageInfo. Следният кодов откъс показва как да се покаже размерът на съобщението, използвайки ExchangeMessageInfo клас.
// 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("==================================");
}
Изтегляне на съобщения рекурсивно
Този EWSClient’s listSubFolders() метод, който може да се използва за получаване на съобщения от папки и подпапки в пощенска кутия на Exchange Server рекурсивно. Това изисква Exchange Server 2007 или по-нов, тъй като използва EWS. Следният кодов откъс показва как да се изтегли цялата пощенска кутия (папки и подпапки) на Exchange Server. Структурата на папките се създава локално и всички съобщения се изтеглят.
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) {
}
}
Изтегляне на съобщения от публични папки
Microsoft Exchange Server позволява на потребителите да създават публични папки и да публикуват съобщения в тях. За да направите това през вашето приложение, използвайте Aspose.Email EWSClient клас за свързване към Exchange Server и четене и изтегляне на съобщения и публикации от публични папки. Следният кодов откъс показва как се четат всички публични папки и подпапки, както и се изброяват и изтеглят всички съобщения, намерени в тези папки. Този пример работи само с 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);
}
}
}
Преместване на съобщения
Можете да преместите имейл съобщения от една папка в друга с помощта на IEWSClient клас преместване метод. Приема следните параметри:
- Уникалното URI на съобщението, което трябва да се премести.
- Уникалното URI на целевата папка.
Преместване на съобщения между папки
Следният кодов откъс показва как да преместите съобщение в пощенска кутия от папката Inbox към папка, наречена Processed. В този пример, приложението:
- Чете съобщения от папката Inbox.
- Обработва част от съобщенията въз основа на критерии (в този пример търсим ключова дума в темата на съобщението).
- Премества съобщения, които отговарят на зададеното условие, в папката processed.
// 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
}
}
Изтриване на съобщения
Можете да изтривате имейл съобщения от папка с помощта на IEWSClient клас deleteItem метод. Той приема уникалния URI на съобщението като параметър.
Следният кодов откъс показва как да изтриете съобщение от папка Inbox. За целите на този пример, кодът:
- Чете съобщения от папката Inbox.
- Обработвайте съобщенията според определени критерии (в този пример намираме ключова дума в темата на съобщението).
- Изтрива съобщението.
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
}
}
Копиране на съобщения
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());
}