עבודה עם תיבת דואר Exchange והודעות - קריאת אימייל מ-Exchange Server ב-Java
קבלת מידע תיבת דואר באמצעות EWS
ה EWSClient המחלקה כוללת חברים שניתן להשתמש בהם לקבל מידע על תיבת דואר מ‑Exchange Server על ידי קריאה ל‑ IEWSClient.getMailboxInfo() מתודה. היא מחזירה מופע מסוג ExchangeMailboxInfo. קבל מידע על תיבת הדואר מתכונות כגון MailboxUri, InboxUri ו DraftsUri. מאמר זה מציג כיצד לגשת למידע תיבת דואר באמצעות Exchange Web Services.
אם ברצונך להתחבר ל‑Exchange Server באמצעות Exchange Web Services (EWS), השתמש ב‑ EWSClient class. מחלקה זו משתמשת ב‑EWS להתחבר ולנהל פריטים ב‑Exchange Server. קטע קוד Java הבא מראה כיצד לקבל מידע על תיבת הדואר באמצעות Exchange 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 בעזרת הכלים ב 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 class מקבל מחרוזת המייצגת את המחלקה של ההודעה. דוגמת הקוד למטה מציגה כיצד לקבל את מחלקת ההודעה:
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 for Java. API זה מספק מנגנון לגישה לתיקיות ולאימיילים מתיבות דואר אחרות בעזרת IEWSClient class. פונקציונליות זו ניתנת להשגה באמצעות המומצאת 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 על ידי קריאה ל‑ IEWSClient.listMessages מתודה. קבל מידע בסיסי על הודעות, כגון נושא, ממן, אל ומזהה הודעה, באמצעות 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. אפשר גם לקבל את רשימת ההודעות מתיקיות אחרות. ה‑ 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 Server ולשמור אותן על הדיסק בפורמטים EML ו‑MSG:
- שמור כ‑EML על הדיסק.
- שמור לזרם זיכרון.
- שמור כ‑MSG.
שמירת הודעות ל‑EML
כדי לקבל הודעות ולשמור בפורמט EML:
- צור מופע של המחלקה IEWSClient.
- ספק את mailboxUri, שם משתמש, סיסמה והדומיין.
- קרא למתודה IEWSClient.listMessages() כדי לקבל מופע של האוסף ExchangeMessagesInfoCollection.
- עבור על האוסף ExchangeMessagesInfoCollection כדי לקבל את ה‑URI הייחודי של כל הודעה.
- קרא למתודה IEWSClient.saveMessage() והעבר את ה‑URI הייחודי כפרמטר.
- ספק למתודה saveMessage() נתיב למיקום שבו ברצונך לשמור את הקובץ.
קטע הקוד הבא מציג כיצד להשתמש ב‑EWS להתחבר ל‑Exchange Server ולשמור הודעות כקבצי 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 class. קטע הקוד הבא מראה איך לשמור הודעות מתיבת דואר של Exchange Server לזרם זיכרון באמצעות 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 Server ולשמור אותן בפורמט 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 מ-Message URI
הודעת אימייל מיוצגת על ידי מזהה ייחודי, URI, והיא חלק בלתי נפרד מה ExchangeMessageInfo אובייקט. במקרה שבו רק URI של ההודעה זמין, אז ExchangeMessageInfo אובייקט ניתן גם לאחזר באמצעות המידע הזמין הזה. הגרסה המוגדלת של listMessages מקבל רשימת מזהים לשימוש 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() מתודה מקבלת מידע בסיסי על הודעות, לדוגמה, הנושא, מזהה ההודעה, השולח והמקבל. לקבלת פרטי ההודעה המלאים, Aspose.Email.Exchange מספקת את המתודה IEWSClient.fetchMessage(). מתודה זו מקבלת את URI של ההודעה כפרמטר ומחזירה מופע של MailMessage מחלקה. ה- MailMessage class ואז מספק פרטי הודעה כגון גוף, כותרות וקבצים מצורפים. גלה עוד על MailMessage API, או גלה כיצד לנהל אימיילים עם MailMessage class. כדי לאחזר הודעות מתיבת הדואר של Exchange Server:
- צור מופע מסוג 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 server מיוצג על‑ידי 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של 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 הייחודי של תיקיית היעד.
העברת הודעות בין תיקיות
קטע הקוד הבא מראה כיצד להעביר הודעה בתיבת דואר מתיקיית הדואר הנכנס לתיקייה בשם 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. למטרת דוגמה זו, הקוד:
- קורא הודעות מתיקיית הדואר הנכנס.
- עבד הודעות על בסיס קריטריונים מסוימים (בדוגמה זו, אנו מחפשים מילת מפתח בנושא ההודעה).
- מוחק את ההודעה.
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());
}