العمل مع صندوق بريد Exchange والرسائل - قراءة البريد الإلكتروني من خادم Exchange باستخدام Java
الحصول على معلومات صندوق البريد باستخدام EWS
الـ EWSClient الفئة تحتوي على أعضاء يمكن استخدامها للحصول على معلومات صندوق البريد من خادم Exchange عن طريق استدعاء IEWSClient.getMailboxInfo() طريقة. تُعيد نسخة من النوع ExchangeMailboxInfo. احصل على معلومات صندوق البريد من خصائص مثل MailboxUri, InboxUri و DraftsUri. توضح هذه المقالة كيفية الوصول إلى معلومات صندوق البريد باستخدام Exchange Web Services.
إذا كنت ترغب في الاتصال بخادم Exchange باستخدام Exchange Web Services (EWS)، استخدم EWSClient الفئة. تستخدم هذه الفئة EWS للاتصال وإدارة العناصر على خادم Exchange. يوضح المقتطف البرمجي التالي بلغة Java كيفية الحصول على معلومات صندوق البريد باستخدام خدمات الويب Exchange.
// 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 باستخدام 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 for 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 عن طريق استدعاء IEWSClient.listMessages طريقة. احصل على المعلومات الأساسية حول الرسائل، مثل الموضوع، المرسل، المستلم ومعرّف الرسالة، باستخدام listMessages طريقة.
قائمة رسائل بسيطة
لقائمة الرسائل في صندوق بريد Exchange:
- إنشاء مثيل من الـ IEWSClient فئة.
- استدعِ طريقة listMessages وأنشئ مجموعة رسائل.
- التكرار عبر المجموعة وعرض معلومات الرسالة.
يوضح المقتطف البرمجي التالي بلغة Java كيفية الاتصال بخادم Exchange باستخدام EWS وإدراج الرسائل من مجلد البريد الوارد.
// Create instance of ExchangeWebServiceClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "UserName", "Password");
// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());
// 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());
}
قائمة الرسائل من مجلدات مختلفة
المقتطفات البرمجية أعلاه, قم بإدراج جميع الرسائل في مجلد البريد الوارد. من الممكن أيضًا الحصول على قائمة الرسائل من مجلدات أخرى. الـ 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 تأخذ قائمة من المعرفات للاستخدام 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
قائمة الرسائل على خادم Exchange استخدمت الـ listMessages() طريقة للحصول على قائمة رسائل من صندوق بريد خادم Exchange. الـ listMessages() الطريقة تحصل على معلومات أساسية عن الرسائل، مثل الموضوع، معرف الرسالة، المرسل والمستقبل. للحصول على تفاصيل الرسالة كاملة، توفر 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 بشكل متكرر. يتطلب ذلك Exchange Server 2007 أو أحدث، لأنه يستخدم EWS. يُظهر مقطع الشيفرة التالي كيفية تنزيل كامل صندوق البريد (المجلدات والمجلدات الفرعية) من خادم Exchange. يتم إنشاء هيكل المجلدات محليًا وتحميل جميع الرسائل.
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’s EWSClient فئة للاتصال بخادم Exchange وقراءة وتحميل الرسائل والمشاركات من المجلدات العامة. يُظهر مقطع الشيفرة التالي كيفية قراءة جميع المجلدات العامة والمجلدات الفرعية، وقائمة وتحميل أي رسائل موجودة في هذه المجلدات. هذا المثال يعمل فقط مع 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 الفريد للمجلد الوجهة.
نقل الرسائل بين المجلدات
يعرض مقطع الشيفرة التالي كيفية نقل رسالة في صندوق بريد من مجلد الوارد إلى مجلد يسمى المعالجة. في هذا المثال، التطبيق:
- قراءة الرسائل من مجلد الوارد.
- يعالج بعض الرسائل بناءً على معايير معينة (في هذا المثال، نبحث عن كلمة مفتاحية في موضوع الرسالة).
- ينقل الرسائل التي تستوفي الشرط المعطى إلى مجلد المعالجة.
// 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 الفريد للرسالة كمعامل.
يوضح المقتطف البرمجي التالي كيفية حذف رسالة من مجلد البريد الوارد. لأغراض هذا المثال، الكود:
- قراءة الرسائل من مجلد الوارد.
- معالجة الرسائل بناءً على معايير معينة (في هذا المثال، نبحث عن كلمة رئيسية في موضوع الرسالة).
- يحذف الرسالة.
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 تسمح بنسخ رسالة من مجلد إلى آخر باستخدام 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());
}